Admin Ajax restituisce 0


28

Sono relativamente nuovo in particolare per jQuery e AJAX. Ho un piccolo problema con il valore restituito sempre pari a 0, anche se penso che questo sia in realtà il messaggio di successo e non restituisce nulla.

Ho analizzato il versetto di Google e ho la funzione die () sul callback di PHP e credo che le add_actions siano corrette.

Sto lavorando su un host locale, anche se dubito che ciò influisca e questo è tutto nell'amministratore, non nel front-end. Ho anche verificato che js sia accodato e localizzato.

Ricevo un messaggio 200 OK nell'area sviluppatore di Chrome.

Ho anche provato l'AJAX di base da http://codex.wordpress.org/AJAX_in_Plugins e ha anche restituito 0, il che mi fa chiedere se è qualcosa di diverso dal codice indicato di seguito.

In questo momento sto solo cercando di farlo inviare qualcosa a jQuery. Qualsiasi aiuto sarebbe apprezzato.

Il 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

Il 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
Hai verificato che Ajaxurl sia impostato correttamente?
Andrew Bartel,

La tua console del browser mostra errori? Se sì, quali sono?
s_ha_dum,

2
jQuery('.cl_link_buttons').val('id').click(function()sembra strano.
fuxia

Andrew, sì, credo che sia corretto, l'URL della richiesta in Chrome Inspector mostra domain / wp-admin / admin-ajax.php
Apina,

@s_ha_dum Nessun errore visualizzato
Apina

Risposte:


40

Una 0risposta significa che l'azione non è impostata (nei dati ajax) o che non è possibile trovare la funzione di callback dell'azione.


2
Sì, questa è la risposta corretta. L'aggiunta di die () alla fine fa, termina lo script. Tale risposta è tecnicamente corretta se vedi 0 aggiunto alla FINE dell'output, tuttavia se tutto ciò che ottieni è "0", significa che non è stato restituito nulla e hai un errore come descritto in questa risposta.
Hybrid Web Dev

Oppure non hai appena restituito nulla di proposito nel php che gestisce la richiesta Ajax. Assicurati di fare eco, altrimenti, usa .alwaysper catturarlo.
Solomon Closson,

20

Quello che devi fare è aggiungere die();alla fine della tua funzione.

Vedi il motivo e altro qui: http://codex.wordpress.org/AJAX_in_Plugins

Gli appunti:

  • Dovresti fare echoqualcosa prima di eseguire die. Ciò impedirà gli errori del server e aiuterà durante il debug.

7
Questa è la risposta al problema WP AJAX 0.
Ben Racicot,

In realtà, se aggiungi semplicemente die()senza echeggiare qualcosa, questo ti darà anche un errore del server interno 500 e ritornerai 0per wp-admin/admin-ajax.php. Dovresti sempre echeggiare qualcosa, anche se stai solo impostando dei valori e non è necessario restituire nulla. Altrimenti, se non fai eco e non die()devi usare nulla .always()per catturarlo, perché non ci sarà .done(), lo farà .fail()perché muore senza nulla = Errore 500.
Solomon Closson,

hai qualche link o codice funzionante, così possiamo dare un'occhiata? @SolomonClosson
Francisco Corrales Morales,

Tutte le mie risposte sono state testate in ambienti live. È molto semplice testarlo, basta eseguire una die();funzione ajax nel functions.phpfile senza echeggiare nulla prima di questo e chiamare l'azione tramite ajax, ad esempio: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,

Noterai, Failed apparirà, la risposta sarà un 500 Errore interno del server.
Solomon Closson,


2

Ho lo stesso problema. E risolto. Devi inviare la variabile "action" come nell'esempio:

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

Perché in wp-admin / admin-ajax.php è il gestore per la variabile di azione:

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

4
Il PO fa inviare una actionparametro. Anche se questo potrebbe aver funzionato per te, non è stato qui il problema.
s_ha_dum,

1

Prova a eseguire questo codice sulla console

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

Riesco a vedere molte cose sbagliate sul tuo codice JavaScript e questo potrebbe essere il motivo.


Bene, sta venendo fuori un sacco di cose che non capisco del tutto. Cosa capisco: ReadyState 4, stato 200, responseText "0". E poi arriva la risposta 0. Se qualcosa di specifico dovrei cercare qui? Se ci sono problemi con il codice, ti preghiamo di segnalarli e posso esaminarli, sto ancora imparando jQuery.
Apina,

il tuo sito è attivo?
Omar Abid,

No, è localhost
Apina,

Difficile da dire. Potresti provare a eseguire console.info (ajaxurl); e vedi cosa dà?
Omar Abid,

1
prova a sostituire ajaxurl con ' localhost / wp-admin / admin-ajax.php ' e guarda cosa ti dà
Omar Abid

1

Ho avuto anche questo problema, ed era il fatto che stavo usando returninvece che echonella mia funzione PHP. Modificandolo per echorisolverlo.

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

0

Ho avuto lo stesso problema, per risolverlo ho usato wp_die()alla fine della mia funzione subito dopo un echo. Non dimenticare di passare l'azione sulla tua sceneggiatura.

Per essere sicuri, controlla se la tua funzione deve usare wp_ajax_noprivlike wp_ajax.


0

Solo per riferimento, per chiunque arrivi qui a cercare "la richiesta ajax restituisce 0": ricorda quando aggiungi un'azione ajax al metodo dell'oggetto per essere sicuro che il modificatore di accesso ai metodi sia public.

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

add_actiontace solo se non può chiamare il tuo metodo al di fuori di $object.


0

Se non usi la funzione wp_localize_script () per impostare ajax url, admin ajax restituisce 0. Penso che sia un bug di Wordpress. Ecco un esempio:

    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' ) );

Il file 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')
            }
            });
     });
}); 

// codice funzione 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();
    }
?>

Solo pubblicare il codice non è buono, puoi spiegare cosa fa questo pezzo di codice?
bravokeyl,

importante: $ date = isset ($ _ POST ['date'])? $ _POST ['data']: 0; E la funzione die ();
Ngocheng,

0

Coloro che ottengono l'errore 0 :), action => 'action'

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

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

-1
SI PROVA:

add_action ('init', 'ly_form_ajax_init');


funzione ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ('jquery'));
    wp_enqueue_script ( 'LY-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', array (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// L'azione è: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

funzione my_function () {
    ob_clean ();
    echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Codice funzione in questa pagina: [ly-form]
 * @param digitare $ atts
 * @param type $ content
 * @return string
 * /
funzione ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Modulo HTML mostrerà,
funzione html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

'; $ html. = '

Dieci *

'; $ html. = '

Ỉa chỉ *

'; $ html. = '

E-mail *

'; $ html. = '

Nội dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; restituisce $ html; } E QUI js (ly-script.js): (funzione ($) { $ (document) .ready (function () { // Esegue l'invio del modulo AJAX $ ('form.ly-form-ex'). on ('submit', function (e) { e.preventDefault (); $ ( '# Carico') html ( 'loading ....'); var dataString = {action: 'contact_ajax'}; $ .Ajax ({ tipo: "POST", url: ly_form_ajax_object.ajaxurl, dati: dataString, successo: funzione (dati) { $ ( '# Carico') html (i dati).; }, errore: funzione (errorThrown) { alert (errorThrown); } }); }); }); // fine pronto }) (jQuery);

Spero che ti sia utile, meglio


Potresti voler spiegare il perché :)
kaiser

La linea di fondo qui può essere ob_clean (); funzione. Puoi fare ed esperienza
Ly Van Vu

-2

Prova ad aggiungere una ifdichiarazione:

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

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


//your coded function


die();
}



}// end function

1
Come risolverebbe questo problema? Nota la risposta accettata e il codice originale.
fuxia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.