Quản trị viên Ajax đang trở về 0


28

Tôi tương đối mới với jQuery và AJAX nói riêng. Tôi có một vấn đề nhỏ với giá trị trả về luôn là 0, mặc dù tôi nghĩ đây thực sự là thông điệp thành công và nó không trả về bất cứ điều gì.

Tôi đã truy quét Google-verse và tôi có hàm die () trên hàm gọi lại PHP và tôi tin rằng add_ilities là chính xác.

Tôi đang làm việc trên một máy chủ lưu trữ cục bộ, mặc dù tôi nghi ngờ điều đó ảnh hưởng đến nó và đây là tất cả trong quản trị viên, không phải giao diện người dùng. Tôi cũng đã kiểm tra rằng js đã được xử lý và bản địa hóa.

Tôi nhận được một tin nhắn 200 OK trong khu vực nhà phát triển chrome.

Tôi cũng đã kiểm tra AJAX cơ bản từ http://codex.wordpress.org/AJAX_in_Plugins và nó cũng trả về 0, điều này khiến tôi tự hỏi liệu nó có phải là thứ gì khác ngoài mã được nêu dưới đây không.

Ngay bây giờ tôi chỉ đang cố gắng làm cho nó gửi một cái gì đó trở lại jQuery. Bất kỳ trợ giúp sẽ được đánh giá cao.

JQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}

1
Bạn đã xác minh rằng ajaxurl được đặt đúng chưa?
Andrew Bartel

Bảng điều khiển trình duyệt của bạn có hiển thị bất kỳ lỗi nào không? Nếu vậy, chúng là gì?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()có vẻ kỳ quặc
fuxia

Andrew, vâng tôi tin là đúng, url yêu cầu trong Chrome Inspector đang hiển thị tên miền / wp-admin / admin-ajax.php
Apina

@s_ha_dum Không có lỗi hiển thị
Apina

Câu trả lời:


40

Một 0phương tiện đáp ứng một trong hai rằng hành động không được thiết lập (trong dữ liệu ajax) hoặc hàm callback của hành động không thể được tìm thấy.


2
Vâng, đây là câu trả lời chính xác. Tất cả việc thêm die () vào cuối sẽ làm chấm dứt tập lệnh. Câu trả lời đó là chính xác về mặt kỹ thuật nếu bạn thấy 0 được gắn vào END của đầu ra, tuy nhiên nếu tất cả những gì bạn nhận được là '0', thì điều đó có nghĩa là không có gì được trả về và bạn có lỗi như được mô tả trong câu trả lời này.
Lai Web Dev

Hoặc bạn không trả về mục đích nào trong php xử lý yêu cầu ajax. Hãy chắc chắn để lặp lại một cái gì đó ra, nếu không, sử dụng .alwaysđể chụp nó.
Solomon Closson

20

Những gì bạn phải làm là thêm die();vào cuối chức năng của bạn.

Xem lý do và nhiều hơn nữa tại đây: http://codex.wordpress.org/AJAX_in_Plugins

Ghi chú:

  • Bạn nên echomột cái gì đó trước khi thực hiện die. Điều này sẽ ngăn lỗi máy chủ và sẽ giúp ích khi gỡ lỗi.

7
Đây là câu trả lời cho vấn đề WP AJAX 0.
Ben Racicot

Trên thực tế, nếu bạn chỉ cần thêm die()mà không lặp lại một cái gì đó, điều này cũng sẽ cung cấp cho bạn một 500 Internal Server Error, và gửi lại 0cho wp-admin/admin-ajax.php. Bạn phải luôn luôn lặp lại một cái gì đó, ngay cả khi bạn chỉ đặt giá trị và không có gì cần phải trả lại. Mặt khác, nếu bạn lặp lại không có gì và die(), bạn phải sử dụng .always()để chụp nó, vì nó sẽ không ở trong .done()đó, nó sẽ ở trong .fail()vì nó chết mà không có gì = 500 Lỗi.
Solomon Closson

Bạn có một số liên kết, hoặc mã làm việc, vì vậy chúng ta có thể xem? @SolomonClosson
Francisco Corrales Morales

Tất cả các câu trả lời của tôi đã được thử nghiệm trong môi trường sống. Rất đơn giản để kiểm tra điều này, chỉ cần thực hiện die();chức năng ajax trong functions.phptệp mà không lặp lại bất cứ điều gì trước đó và gọi hành động qua ajax, ví dụ:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
Solomon Closson

Bạn sẽ nhận thấy, Thất bại sẽ hiển thị, phản hồi sẽ là 500 Lỗi Máy chủ Nội bộ.
Solomon Closson

2

Vì vậy, tôi đã làm việc ra. Nó không phải là jQuery như vậy mặc dù tôi đã cải thiện điều đó, đó là vị trí của chức năng gọi lại. Tôi đã chuyển nó sang tập tin plugin chính và nó hoạt động.


4
bạn có thể cho thấy bạn đã làm điều đó như thế nào?
Francisco Corrales Morales

1
Tôi đang gặp vấn đề tương tự, bạn có thể chỉ ra cách bạn khắc phục vấn đề này không?
Jeremy

Một câu trả lời khác có ở đây: wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales

2

Tôi có cùng một vấn đề. Và giải quyết nó. Bạn phải gửi biến "hành động" như trong ví dụ:

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

Bởi vì trong wp-admin / admin-ajax.php là trình xử lý cho biến hành động:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26

4
OP không gửi actiontham số. Mặc dù điều này có thể đã làm việc cho bạn nhưng nó không phải là vấn đề ở đây.
s_ha_dum

1

Hãy thử chạy mã này trên bàn điều khiển

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

Tôi có thể thấy nhiều điều sai về mã JavaScript của bạn và đó có thể là lý do.


Vâng, nó đang đến với rất nhiều điều tôi không hiểu đầy đủ. Những gì tôi hiểu: ReadyState 4, status 200, answerText "0". Và sau đó nó đưa ra câu trả lời 0. Nếu có gì cụ thể tôi nên tìm kiếm ở đây? Nếu có vấn đề với mã, vui lòng chỉ ra chúng và tôi có thể xem xét chúng, tôi vẫn đang học jQuery.
Apina

Bạn có trang web của bạn chạy trực tiếp?
Omar Abid

Không, đó là localhost
Apina

Khó nói. Bạn có thể thử chạy console.info (ajaxurl); và xem những gì nó mang lại?
Omar Abid

1
hãy thử thay thế ajaxurl bằng ' localhost / wp-admin / admin-ajax.php ' và xem những gì nó mang lại
Omar Abid

1

Tôi cũng gặp vấn đề này và thực tế là tôi đang sử dụng returnthay vì echotrong chức năng PHP của mình. Thay đổi nó để echosửa nó.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}

0

Tôi đã có cùng một vấn đề, để khắc phục nó tôi đã sử dụng wp_die()ở cuối chức năng của mình chỉ sau một echo. Đừng quên chuyển hành động của bạn trên kịch bản của bạn.

Để chắc chắn, hãy kiểm tra xem chức năng của bạn có phải sử dụng wp_ajax_noprivnhư thế nào không wp_ajax.


0

Chỉ để tham khảo, cho bất kỳ ai đến đây googling "yêu cầu ajax đang trả về 0": Hãy nhớ khi bạn thêm hành động ajax vào phương thức của đối tượng để chắc chắn phương thức sửa đổi truy cập public.

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_actionchỉ im lặng nếu nó không thể gọi phương thức của bạn bên ngoài $object.


0

Nếu bạn không sử dụng hàm wp_localize_script () để đặt url ajax, admin ajax trả về 0. Tôi nghĩ đó là lỗi Wordpress. Đây là một ví dụ:

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

Tệp javascript (search.js):

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});

0
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

// hàm mã php

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>

Chỉ đăng mã là không tốt, bạn có thể vui lòng giải thích đoạn mã này làm gì không?
bravokeyl

quan trọng: $ date = isset ($ _ POST ['date'])? $ _POST ['ngày']: 0; Và hàm die ();
Ngocheng

0

Những người nhận được lỗi 0 :), hành động => 'hành động'

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });

-1
BẠN CỐ GẮNG:

add_action ('init', 'ly_form_ajax_init');


hàm ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', mảng ('jquery'));
    wp_enqueue_script ('ly-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', mảng (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadmessage' => __ ('')
    ));
}
// Hành động là: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_feft');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_factor');

hàm my_feft () {
    ob_clean ();
    tiếng vang "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Mã ngắn trong trang như thế này: [ly-form]
 * @param gõ $ atts
 * @param gõ $ nội dung
 * @return chuỗi
 * /
hàm ly_form_shortcode ($ atts, $ content = "") {
    tiếng vang html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Mẫu HTML sẽ hiển thị,
hàm html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Sầu *

'; $ html. = '

Mười *

'; $ html. = '

Quốc nội *

'; $ html. = '

Email *

'; $ html. = '

Hà Nội dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; trả về $ html; } VÀ TẠI ĐÂY js (ly-script.js): (hàm ($) { $ (tài liệu). yet (function () { // Thực hiện gửi biểu mẫu AJAX $ ('form.ly-form-ex'). on ('submit', function (e) { e.preventDefault (); $ ('# đang tải'). html ('đang tải ...'); var dataString = {hành động: 'contact_ajax'}; $ .ajax ({ gõ: "BÀI", url: ly_form_ajax_object.ajaxurl, dữ liệu: dataString, thành công: hàm (dữ liệu) { $ ('# đang tải'). html (dữ liệu); }, lỗi: hàm (errorThrown) { cảnh báo (errorThrown); } }); }); }); // kết thúc sẵn sàng }) (jQuery);

Hy vọng nó hữu ích cho bạn, Tốt nhất


Bạn có thể muốn giải thích lý do tại sao :)
kaiser

Dòng dưới cùng ở đây có thể là ob_clean (); chức năng. Bạn có thể làm và trải nghiệm
Lý Văn Vũ

-2

Hãy thử thêm một iftuyên bố:

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function

1
Làm thế nào điều đó sẽ giải quyết vấn đề? Lưu ý câu trả lời được chấp nhận và mã gốc.
fuxia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.