Cererea admin ajax returnează 0 cu die()

15 mar. 2012, 18:40:41
Vizualizări: 21.4K
Voturi: 10

Deci folosesc această configurație pentru un apel AJAX în zona administrativă (ca aici):

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("Activat");
                else
                    jQuery("#errore a#inattivo").attr("id","attivo").html("Activează acum");
            });
        }
    );
});
</script>
<?php }

add_action('wp_ajax_my_action', 'my_action_callback');

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

Este doar un cod de test, dar întotdeauna returnează 0 în loc de șirul "attivato". De asemenea, găsește corect URL-ul ajax, fără o eroare 404.
Care este problema?

5
Comentarii

Ai reușit să rezolvi această problemă? Dacă da, te rog comentează (sau acceptă) răspunsul care ți-a rezolvat problema. Dacă niciunul dintre acestea nu ți-a rezolvat problema și este rezolvată, poți să adaugi un răspuns mai jos? Mulțumesc!

jmort253 jmort253
6 iul. 2012 02:51:56

@jmort253 bună, îmi pare rău că îți răspund abia acum, dar momentan încă am această problemă și nu am găsit nicio soluție pe internet :'( lucrez la ea când am timp liber; dacă găsesc soluția, voi scrie aici ;)

Ivano Mercuri Ivano Mercuri
6 iul. 2012 09:56:18

Ok, la fel și la mine. Dacă o să rezolv, voi posta. :) Ține legătura.

jmort253 jmort253
6 iul. 2012 10:27:43

Am rezolvat problema mea, sufixul din wp_ajax_my_action, partea "my_action", trebuie să se potrivească cu acțiunea folosită în post-ul jQuery. Văd că la dumneavoastră se potrivește, deci asta nu e problema în cazul vostru. Am reușit să fac să funcționeze și din pagina de admin, ceea ce încercați și dumneavoastră. Sunteți autentificat când încercați să faceți acest apel ajax? Sau sunteți deconectat?

jmort253 jmort253
6 iul. 2012 19:13:41

Corect. Nu am observat asta! ;)

Rutwick Gangurde Rutwick Gangurde
7 iul. 2012 07:44:25
Toate răspunsurile la întrebare 3
1
21

Adaugă și aceasta: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Observă nopriv.

Va rezolva problema ta!

22 iun. 2012 09:00:15
Comentarii

Am rezolvat această problemă asigurându-mă că sufixul "wp_ajax_SUFFIX" se potrivește cu acțiunea, astfel încât acțiunea în post-ul jQuery să fie tot "SUFFIX". Cu toate acestea, nu a fost nevoie să folosesc nopriv... Nu sunt sigur dacă acesta este răspunsul la problema op-ului, deoarece aceasta este o acțiune care are loc pe pagina de administrare, ceea ce înseamnă practic că ești autentificat, sugerând că nu ai nevoie să înregistrezi un handler nopriv...

jmort253 jmort253
6 iul. 2012 19:15:57
0
15

Am avut aceeași problemă. Soluție:

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

Dacă nu adaugi ambele (cu și fără nopriv) va funcționa doar în modul autentificat sau doar în modul neautentificat. nopriv este pentru utilizatorii neautentificați, iar celălalt este pentru cei autentificați.

31 iul. 2012 11:40:03
1

Nu sunt sigur dacă aceasta este problema ta, dar eu primeam doar răspunsul "0" și mi-a luat mult timp să-mi dau seama. Pe lângă faptul că trebuie să pui exit sau die la sfârșitul funcției PHP, am aflat că trebuie să plasezi add_action('wp_ajax_... la nivelul superior al pluginului tău. Eu l-am plasat înăuntrul hook-ului meu admin_menu, ceea ce nu a funcționat. Nu sunt sigur dacă codul tău de mai sus face parte dintr-un fișier inclus în interiorul unei funcții din fișierul principal al pluginului (cum era în cazul meu).

22 mar. 2012 23:20:20
Comentarii

Aceeași problemă aici... Nu sunt sigur cum să rezolv acest tip de problemă, deoarece uneori trebuie să plasăm răspunsul ajax în interiorul sau la sfârșitul codurilor.

Ari Ari
16 dec. 2013 09:52:38