Yêu cầu quản trị ajax trả về 0 với die ()


10

Vì vậy, tôi đang sử dụng cấu hình này cho một cuộc gọi AJAX trong khu vực hành chính ( như thế này ):

add_action( 'admin_head', 'ajaxPerNgg' );

function ajaxPerNgg(){ ?>
<script type="text/javascript" >
jQuery(document).ready(function() {
    jQuery("#message").remove();
    jQuery("#errore a#attivo").click(
        function(){
            var data = {
                action: 'my_action'
            };
            jQuery.post(ajaxurl, data, function(response) {
                if(response == "attivato")
                    jQuery("#errore a#inattivo").attr("id","completato").html("Attivato");
                else
                    jQuery("#errore a#inattivo").attr("id","attivo").html("Attivalo ora");
            });
        }
    );
});
</script>
<?php }

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
    echo 'attivato';
    die();
}

Nó chỉ là một mã kiểm tra, nhưng nó luôn trả về 0 thay vì chuỗi "attivato". Nó cũng tìm thấy url ajax chính xác, không có lỗi 404.
Vấn đề là gì?


Bạn đã bao giờ nhận được vấn đề này tìm ra? Nếu vậy, bạn có thể vui lòng bình luận (hoặc chấp nhận) câu trả lời đã giải quyết vấn đề của bạn không? Nếu không có cách nào giải quyết được vấn đề của bạn và nó đã được giải quyết , bạn có thể vui lòng thêm câu trả lời bên dưới không? Cảm ơn bạn!
jmort253

@ jmort253 hi, xin lỗi đã trả lời bạn ngay bây giờ, nhưng hiện tại, tôi vẫn gặp sự cố này và tôi không tìm thấy giải pháp nào trên web: '(tôi đang làm việc khi tôi có thời gian rảnh; nếu tôi tìm ra giải pháp , tôi sẽ viết ở đây;)
Ivano Mercuri

Ok, giống nhau ở đây. Nếu tôi tìm ra nó, tôi sẽ đăng. :) Giữ liên lạc.
jmort253

1
Tôi đã giải quyết vấn đề của mình, hậu tố của phần wp_ajax_my_action"my_action", phải khớp với hành động được sử dụng trong bài viết jQuery. Tôi thấy rằng kết quả khớp của bạn, vì vậy đó không phải là vấn đề trong trường hợp của bạn. Tôi cũng có nó hoạt động từ trang quản trị, đó là những gì bạn đang cố gắng làm. Bạn có đăng nhập khi cố gắng thực hiện cuộc gọi ajax này không? Hay bạn đã đăng xuất?
jmort253

Đúng. Không để ý điều đó! ;)
Rutwick Gangurde

Câu trả lời:


21

Thêm điều này là tốt : add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Hãy chú ý nopriv.

Nó sẽ giải quyết vấn đề của bạn!


2
Tôi đã sửa lỗi này bằng cách đảm bảo hậu tố của "wp_ajax_SUFFIX" khớp với hành động, để hành động trong bài viết jQuery cũng là "SUFFIX". Tuy nhiên, tôi không cần sử dụng nopriv ... Không chắc đây có phải là câu trả lời cho vấn đề của op không, vì đây là hành động xảy ra trên trang quản trị, điều này khá có nghĩa là bạn đã đăng nhập, điều này gợi ý cho bạn không cần phải đăng ký trình xử lý nopriv ...
jmort253

15

Tôi đã từng gặp vấn đề tương tự. Giải pháp:

add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');

Nếu bạn không thêm cả hai (có và không có nopriv), nó sẽ chỉ hoạt động ở chế độ đăng nhập hoặc chế độ đăng xuất. nopriv là để đăng xuất, cái khác là để đăng nhập.


4

Không chắc đây có phải là vấn đề của bạn không, nhưng tôi đã nhận được phản hồi chỉ là "0" và tôi mất nhiều thời gian nhất để tìm ra nó. Ngoài việc đảm bảo bạn đặt exithoặc dieở cuối hàm php, tôi phát hiện ra rằng bạn phải đặt add_action('wp_ajax_...bit của mình ở cấp cao nhất của plugin. Tôi đã có nó lồng vào trong admin_menucái móc của tôi , nó không hoạt động. Tôi không chắc liệu mã của bạn ở trên có phải là một phần bao gồm bên trong một hàm từ tệp php plugin cấp cao nhất của bạn không (như của tôi).


1
Vấn đề tương tự ở đây .. Không chắc chắn cách khắc phục loại sự cố này, vì đôi khi chúng ta cần đặt phản hồi ajax bên trong hoặc ở phần cuối của mã.
Ari
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.