Admin ajax request return 0 with die ()

10

Jadi saya menggunakan konfigurasi ini untuk panggilan AJAX di wilayah administrasi ( seperti ini ):

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();
}

Ini hanya kode tes, tetapi selalu mengembalikan 0 bukannya string "attivato". Juga menemukan url ajax dengan benar, tanpa kesalahan 404.
Apa masalahnya?

Ivano Mercuri
sumber
Apakah Anda pernah memecahkan masalah ini? Jika demikian, dapatkah Anda berkomentar (atau menerima) jawaban yang memecahkan masalah Anda? Jika tidak ada yang memecahkan masalah Anda dan ini diselesaikan , bisakah Anda menambahkan jawaban di bawah ini? Terima kasih!
jmort253
@ jmort253 hai, maaf untuk menjawab Anda sekarang, tetapi saat ini, saya masih memiliki masalah ini dan saya tidak menemukan solusi di web: '(saya sedang mengerjakannya ketika saya punya waktu luang; jika saya menemukan solusinya , saya akan menulis di sini;)
Ivano Mercuri
Ok, sama di sini. Jika saya mengetahuinya, saya akan memposting. :) Tetap berhubungan.
jmort253
1
Saya menyelesaikan masalah saya, akhiran dari wp_ajax_my_actionbagian "my_action", harus cocok dengan tindakan yang digunakan dalam posting jQuery. Saya melihat bahwa Anda cocok, jadi itu bukan masalah dalam kasus Anda. Saya juga membuatnya bekerja dari halaman admin, yang sedang Anda coba lakukan. Apakah Anda masuk saat mencoba melakukan panggilan ajax ini? Atau Anda keluar?
jmort253
Baik. Tidak memperhatikan itu! ;)
Rutwick Gangurde

Jawaban:

21

Menambahkan ini juga: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Perhatikan nopriv.

Itu akan menyelesaikan masalah Anda!

Rutwick Gangurde
sumber
2
Saya memperbaikinya dengan memastikan sufiks "wp_ajax_SUFFIX" cocok dengan action, sehingga action di post jQuery juga "SUFFIX". Namun, saya tidak perlu menggunakan nopriv ... Tidak yakin apakah ini adalah jawaban untuk masalah op, karena ini adalah tindakan yang terjadi pada halaman admin, yang berarti Anda masuk, yang menunjukkan Anda tidak perlu mendaftarkan handler nopriv ...
jmort253
15

Saya memiliki masalah yang sama. Larutan:

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

Jika Anda tidak menambahkan keduanya (dengan dan tanpa nopriv) itu akan berfungsi baik dalam mode masuk atau mode keluar saja. nopriv untuk keluar, yang lain untuk masuk.

Paul
sumber
4

Tidak yakin apakah ini masalah Anda, tapi saya mendapat respons hanya "0" dan saya butuh waktu paling lama untuk mengetahuinya. Selain memastikan Anda meletakkan exitatau diepada akhir fungsi php Anda, saya menemukan bahwa Anda harus meletakkan add_action('wp_ajax_...bit Anda di tingkat atas plugin Anda. Saya memilikinya bersarang di dalam admin_menukait saya , yang tidak berhasil. Saya tidak yakin apakah kode Anda di atas adalah bagian dari sertakan di dalam fungsi dari file php plugin tingkat atas Anda (seperti milik saya sebelumnya).

Jeff
sumber
1
Masalah yang sama di sini .. Tidak yakin bagaimana cara memperbaiki masalah semacam ini, karena kita terkadang perlu meletakkan respons ajax di dalam atau di bagian akhir kode.
Ari