Admin Ajax retourne 0

28

Je suis relativement nouveau sur jQuery et AJAX en particulier. J'ai un petit problème avec la valeur de retour toujours 0, bien que je pense que c'est en fait le message de réussite et qu'il ne retourne rien.

J'ai parcouru le verset Google et j'ai la fonction die () sur le rappel PHP et je crois que les add_actions sont correctes.

Je travaille sur un hôte local, bien que je doute que cela l'affecte et que tout cela soit dans l'administration, pas dans le front-end. J'ai également vérifié que le js est mis en file d'attente et localisé.

Je reçois un message 200 OK dans la zone des développeurs Chrome.

J'ai également testé l'AJAX de base à partir de http://codex.wordpress.org/AJAX_in_Plugins et il a également renvoyé 0, ce qui me fait me demander s'il s'agit d'autre chose que le code décrit ci-dessous.

En ce moment, j'essaie juste de lui faire renvoyer quelque chose à la jQuery. Toute aide serait appréciée.

La 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

Le 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
la source
1
Avez-vous vérifié que ajaxurl est correctement configuré?
Andrew Bartel
Votre console de navigateur affiche-t-elle des erreurs? Si c'est vrai, que sont-ils?
s_ha_dum
2
jQuery('.cl_link_buttons').val('id').click(function()semble étrange.
fuxia
Andrew, oui je crois que c'est correct, l'url de demande dans Chrome Inspector montre domain / wp-admin / admin-ajax.php
Apina
@s_ha_dum Aucune erreur ne s'affiche
Apina

Réponses:

40

Une 0réponse signifie que l'action n'est pas définie (dans les données ajax) ou que la fonction de rappel de l'action est introuvable.

helgatheviking
la source
2
Oui, c'est la bonne réponse. L'ajout de die () à la fin ne fait que terminer le script. Cette réponse est techniquement correcte si vous voyez 0 ajouté à la FIN de la sortie, mais si tout ce que vous obtenez est '0', cela signifie que rien n'a été retourné et vous avez une erreur comme décrit dans cette réponse.
Hybrid Web Dev
Ou vous venez de ne rien retourner exprès dans le php qui gère la requête ajax. Assurez-vous de faire écho à quelque chose, sinon, utilisez-le .alwayspour le capturer.
Solomon Closson
20

Ce que vous devez faire, c'est ajouter die();à la fin de votre fonction.

Voir la raison et plus ici: http://codex.wordpress.org/AJAX_in_Plugins

Remarques:

  • Vous devriez echoquelque chose avant d'exécuter die. Cela évitera les erreurs de serveur et vous aidera lors du débogage.
Francisco Corrales Morales
la source
7
Ceci est la réponse au problème WP AJAX 0.
Ben Racicot
En fait, si vous ajoutez juste die()sans écho quelque chose, cela va aussi vous donner un 500 Internal Server Error, et revenir 0pour wp-admin/admin-ajax.php. Vous devez toujours faire écho à quelque chose, même si vous ne faites que définir des valeurs et que rien n'est nécessaire pour être retourné. Sinon, si vous ne faites écho à rien et que die()vous devez l'utiliser .always()pour le capturer, car il ne sera pas .done()dedans, il sera .fail()dedans car il meurt sans rien = 500 Error.
Solomon Closson du
avez-vous des liens ou du code de travail pour que nous puissions y jeter un œil? @SolomonClosson
Francisco Corrales Morales
Toutes mes réponses ont été testées en environnement réel. Il est très simple de tester cela, il suffit de faire un die();dans la fonction ajax dans le functions.phpfichier sans faire écho à quoi que ce soit avant cela, et d'appeler l'action via ajax, par exemple: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
Vous remarquerez que l'échec apparaîtra, la réponse sera une erreur de 500 serveurs internes.
Solomon Closson
2

Je l'ai donc résolu. Ce n'était pas le jQuery en tant que tel, bien que j'aie amélioré cela, c'était le placement de la fonction de rappel. Je l'ai déplacé vers le fichier plugin principal et cela a fonctionné.

Apina
la source
4
pouvez-vous montrer comment vous l'avez fait?
Francisco Corrales Morales
1
J'ai ce même problème, pourriez-vous montrer comment vous avez résolu ce problème?
Jeremy
Une autre réponse est ici: wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales
2

J'ai le même problème. Et je l'ai résolu. Vous devez envoyer la variable "action" comme dans l'exemple:

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

Parce que dans wp-admin / admin-ajax.php est le gestionnaire de la variable d'action:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
Mcart
la source
4
L'OP n'envoie un paramètre. Bien que cela ait fonctionné pour vous, ce n'était pas le problème ici. action
s_ha_dum
1

Essayez d'exécuter ce code sur la console

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

Je peux voir beaucoup de choses mal sur votre code JavaScript et cela pourrait être la raison.

Omar Abid
la source
Eh bien, il arrive beaucoup de choses que je ne comprends pas bien. Ce que je comprends: ReadyState 4, état 200, responseText "0". Et puis il arrive avec la réponse 0. S'il y a quelque chose en particulier que je devrais chercher ici? S'il y a des problèmes avec le code, veuillez les signaler et je peux les examiner, j'apprends toujours jQuery.
Apina
avez-vous votre site en ligne?
Omar Abid
Non, c'est localhost
Apina
Dur à dire. Pourriez-vous essayer d'exécuter console.info (ajaxurl); et voir ce que ça donne?
Omar Abid
1
essayez de remplacer ajaxurl par « localhost / wp-admin / admin-ajax.php » et voyez ce que cela donne
Omar Abid
1

J'ai aussi eu ce problème, et c'était le fait que j'utilisais returnplutôt que echodans ma fonction PHP. Le changer pour le echocorriger.

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

J'ai eu le même problème, pour le réparer j'ai utilisé wp_die()à la fin de ma fonction juste après un echo. N'oubliez pas de passer votre action sur votre script.

Pour être sûr, vérifiez si votre fonction doit utiliser wp_ajax_noprivcomme wp_ajax.

Yann J
la source
0

Juste pour référence, pour tous ceux qui arrivent ici googler "la demande ajax renvoie 0": N'oubliez pas lorsque vous ajoutez une action ajax à la méthode de l'objet pour être sûr que le modificateur d'accès aux méthodes est public.

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

add_actionfait simplement taire s'il ne peut pas appeler votre méthode en dehors de $object.

Marecky
la source
0

Si vous n'utilisez pas la fonction wp_localize_script () pour définir l'url ajax, admin ajax renvoie 0. Je pense que c'est le bogue Wordpress. Voici un exemple:

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

Le fichier 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
});
Alain-Aymerick FRANCOIS
la source
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')
            }
            });
     });
}); 

// fonction de code 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
la source
Le simple fait de poster du code n'est pas bon, pouvez-vous expliquer ce que fait ce morceau de code?
bravokeyl
important: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; Et la fonction die ();
Ngocheng
0

Ceux qui obtiennent l'erreur 0 :), action => 'action'

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

$.post(ajaxurl, data, function(response) { alert(response); });
Savaş Hasçelik
la source
-1
TU ESSAYES:

add_action ('init', 'ly_form_ajax_init');


fonction 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'action est: contact_ajax
add_action ('wp_ajax_contact_ajax', 'ma_fonction');
add_action ('wp_ajax_nopriv_contact_ajax', 'ma_fonction');

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

/ **
 * Code court dans une page comme celle-ci: [ly-form]
 * @param type $ atts
 * @param type $ content
 * @return string
 * /
fonction ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Le formulaire HTML affichera,
function html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

» $ html. = '

Dix *

» $ html. = '

Địa chỉ *

» $ html. = '

Email *

» $ html. = '

Nội dung * dg

» $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; return $ html; } ET ICI js (ly-script.js): (fonction ($) { $ (document) .ready (fonction () { // Soumettre le formulaire AJAX $ ('form.ly-form-ex'). on ('submit', fonction (e) { e.preventDefault (); $ ('# chargement'). html ('chargement ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ tapez: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, succès: fonction (données) { $ ('# chargement'). html (données); }, erreur: fonction (errorThrown) { alerte (errorThrown); } }); }); }); // fin prêt }) (jQuery);

J'espère que cela vous sera utile, meilleur

Ly Van Vu
la source
Vous voudrez peut-être expliquer pourquoi :)
kaiser
La ligne de fond ici peut être l'ob_clean (); une fonction. Vous pouvez faire et expérimenter
Ly Van Vu
-2

Essayez d'ajouter une ifdéclaration:

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

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


//your coded function


die();
}



}// end function
xtianity
la source
1
Comment cela résoudrait-il le problème? Notez la réponse acceptée et le code d'origine.
fuxia