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.