Admin Ajax gibt 0 zurück

28

Ich bin relativ neu in jQuery und insbesondere in AJAX. Ich habe ein kleines Problem, bei dem der Rückgabewert immer 0 ist, obwohl ich denke, dass dies tatsächlich die Erfolgsmeldung ist und nichts zurückgibt.

Ich habe den Google-Vers durchsucht und ich habe die die () -Funktion für den PHP-Callback und ich glaube, dass die add_actions korrekt sind.

Ich arbeite an einem lokalen Host, obwohl ich bezweifle, dass dies Auswirkungen hat und dies alles im Admin, nicht im Frontend. Ich habe auch überprüft, ob das js in die Warteschlange gestellt und lokalisiert ist.

Ich erhalte eine 200-OK-Nachricht im Chrome-Entwicklerbereich.

Ich habe auch das grundlegende AJAX von http://codex.wordpress.org/AJAX_in_Plugins ausprobiert und es hat auch 0 zurückgegeben, was mich fragt, ob es sich um etwas anderes als den unten beschriebenen Code handelt.

Im Moment versuche ich nur, etwas an die jQuery zurückzusenden. Jede Hilfe wäre dankbar.

Die 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

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


}
Apina
quelle
1
Haben Sie überprüft, ob Ajaxurl richtig eingestellt ist?
Andrew Bartel
Zeigt Ihre Browserkonsole Fehler an? Wenn ja, was sind sie?
s_ha_dum
2
jQuery('.cl_link_buttons').val('id').click(function()sieht komisch aus.
Fuxia
Andrew, ja, ich glaube, es ist richtig, die Anforderungs-URL in Chrome Inspector zeigt domain / wp-admin / admin-ajax.php
Apina
@s_ha_dum Keine Fehler
angezeigt

Antworten:

40

Eine 0Antwort bedeutet, dass entweder die Aktion nicht gesetzt ist (in den Ajax-Daten) oder dass die Rückruffunktion der Aktion nicht gefunden werden kann.

helgatheviking
quelle
2
Ja, das ist die richtige Antwort. Alles was das Hinzufügen von die () zum Ende bewirkt, ist das Beenden des Skripts. Diese Antwort ist technisch korrekt, wenn 0 an das ENDE der Ausgabe angehängt wird. Wenn Sie jedoch nur '0' erhalten, bedeutet dies, dass nichts zurückgegeben wurde und Sie einen Fehler haben, wie in dieser Antwort beschrieben.
Hybrid Web Dev
Oder Sie haben in dem PHP, das die Ajax-Anfrage bearbeitet, absichtlich nichts zurückgegeben. Stellen Sie sicher, dass Sie etwas ausgeben, andernfalls verwenden Sie .always, um es zu erfassen.
Solomon Closson
20

Was Sie tun müssen, ist die();am Ende Ihrer Funktion hinzuzufügen .

Den Grund und weitere Informationen finden Sie hier: http://codex.wordpress.org/AJAX_in_Plugins

Anmerkungen:

  • Sie sollten echoetwas vor der Ausführung die. Dies verhindert Serverfehler und hilft beim Debuggen.
Francisco Corrales Morales
quelle
7
Dies ist die Antwort auf das WP AJAX 0-Problem.
Ben Racicot
Wenn Sie nur etwas hinzufügen, die()ohne etwas auszugeben, wird ein interner Serverfehler von 500 ausgegeben, und Sie erhalten eine Antwort 0für wp-admin/admin-ajax.php. Sie sollten immer etwas ausgeben, auch wenn Sie nur Werte festlegen und nichts zurückgegeben werden muss. Andernfalls, wenn Sie nichts Echo und die(), müssen Sie verwenden , .always()es zu erfassen, weil es nicht in sein wird .done(), wird es in , .fail()weil es ohne etwas = 500 Fehler stirbt.
Solomon Closson
Haben Sie einige Links oder funktionierenden Code, damit wir einen Blick darauf werfen können? @SolomonClosson
Francisco Corrales Morales
Alle meine Antworten wurden in Live-Umgebungen getestet. Es ist sehr einfach , dies zu testen, nur zu tun , die();in der Ajax - Funktion in der functions.phpDatei , ohne dass dies zu irgendetwas vor Echo aus, und rufen Sie die Aktion über Ajax, zum Beispiel: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
Sie werden bemerken, dass "Fehlgeschlagen" angezeigt wird. Die Antwort lautet "500 Internal Server Error".
Solomon Closson
2

Also habe ich es ausgearbeitet. Es war nicht die jQuery als solche, obwohl ich das verbessert habe, sondern die Platzierung der Rückruffunktion. Ich habe es in die Haupt-Plugin-Datei verschoben und es hat funktioniert.

Apina
quelle
4
Kannst du zeigen, wie du es gemacht hast?
Francisco Corrales Morales
1
Ich habe das gleiche Problem. Können Sie zeigen, wie Sie dieses Problem behoben haben?
Jeremy
Eine andere Antwort ist hier: wordpress.stackexchange.com/a/131397 @ Jeremy
Francisco Corrales Morales
2

Ich habe das gleiche Problem. Und es gelöst. Sie müssen die Variable "action" wie im Beispiel senden:

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

Weil in wp-admin / admin-ajax.php der Handler für die Aktionsvariable ist:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
Mcart
quelle
4
Die OP hat einen schicken actionParameter. Während dies für Sie gearbeitet haben mag, war es hier nicht das Problem.
s_ha_dum
1

Versuchen Sie, diesen Code auf der Konsole auszuführen

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

Ich sehe viele Fehler in Ihrem JavaScript-Code und das könnte der Grund sein.

Omar Abid
quelle
Nun, es gibt eine Menge Dinge, die ich nicht ganz verstehe. Was ich verstehe: ReadyState 4, Status 200, responseText "0". Und dann kommt es mit der Antwort 0. Wenn es etwas im Besonderen gibt, sollte ich hier suchen? Wenn es Probleme mit dem Code gibt, weisen Sie darauf hin, und ich kann sie untersuchen. Ich lerne noch jQuery.
Apina
Läuft Ihre Website live?
Omar Abid
Nein, es ist localhost
Apina
Schwer zu erzählen. Könnten Sie versuchen, console.info (ajaxurl) auszuführen; und sehen, was es gibt?
Omar Abid
1
Versuchen Sie, Ajaxurl durch ' localhost / wp-admin / admin-ajax.php ' zu ersetzen und sehen Sie, was es gibt
Omar Abid
1

Ich hatte dieses Problem auch, und es war die Tatsache, dass ich in meiner PHP-Funktion returnanstatt echoverwendete. Ändern Sie es, um es zu echobeheben.

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

Ich hatte das gleiche Problem, um es zu beheben, das ich wp_die()am Ende meiner Funktion gleich nach einem echo. Vergessen Sie nicht, Ihre Aktion auf Ihrem Skript zu übergeben.

Überprüfen Sie zur Sicherheit, ob Ihre Funktion wp_ajax_noprivlike verwenden muss wp_ajax.

Yann J
quelle
0

Nur als Referenz für alle, die hier googeln: "Ajax-Anforderung gibt 0 zurück": Denken Sie daran, wenn Sie der Methode des Objekts eine Ajax-Aktion hinzufügen, um sicherzugehen, dass der Modifikator für den Methodenzugriff lautet public.

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

add_actionSchweigen Sie einfach, wenn Ihre Methode außerhalb von nicht aufgerufen werden kann $object.

Marecky
quelle
0

Wenn Sie die Funktion wp_localize_script () nicht zum Festlegen der Ajax-URL verwenden, gibt admin ajax 0 zurück. Ich denke, es ist ein Wordpress-Fehler. Hier ist ein Beispiel:

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

Die Javascript-Datei (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
});
Alain-Aymerick FRANCOIS
quelle
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')
            }
            });
     });
}); 

// Code Funktion 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();
    }
?>
Ngocheng
quelle
Nur Postleitzahl ist nicht gut, können Sie bitte erklären, was dieser Code tut?
Bravokeyl
wichtig: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; Und Funktion sterben ();
Ngocheng
0

Diejenigen, die Fehler 0 :) erhalten, Aktion => 'Aktion'

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

$.post(ajaxurl, data, function(response) { alert(response); });
Savaş Hasçelik
quelle
-1
SIE VERSUCHEN:

add_action ('init', 'ly_form_ajax_init');


Funktion 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' => __ ('')
    ));
}
// Aktion ist: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

Funktion my_function () {
    ob_clean ();
    Echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Kurzcode auf einer Seite wie dieser: [ly-form]
 * @param $ atts eingeben
 * @param geben Sie $ content ein
 * @return string
 * /
Funktion ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// HTML-Formular wird angezeigt,
Funktion html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Hallo *

'; $ html. = '

Zehn *

'; $ html. = '

Địa chỉ *

'; $ html. = '

Email *

'; $ html. = '

Nội Dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; return $ html; } UND HIER js (ly-script.js): (Funktion ($) { $ (document) .ready (function () { // AJAX Form Submit durchführen $ ('form.ly-form-ex'). on ('submit', Funktion (e) { e.preventDefault (); $ ('# loading'). html ('loading ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ Typ: "POST", URL: ly_form_ajax_object.ajaxurl, data: dataString, Erfolg: Funktion (Daten) { $ ('# loading'). html (data); }, error: function (errorThrown) { alert (errorThrown); } }); }); }); // fertig }) (jQuery);

Hoffe es ist hilfreich für dich, Best

Ly Van Vu
quelle
Vielleicht möchten Sie erklären, warum :)
Kaiser
Die unterste Zeile hier kann das ob_clean () sein; Funktion. Sie können tun und erleben
Ly Van Vu
-2

Versuchen Sie, eine ifAnweisung hinzuzufügen :

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

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


//your coded function


die();
}



}// end function
xtianity
quelle
1
Wie würde das das Problem lösen? Notieren Sie die akzeptierte Antwort und den Originalcode.
fuxia