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


}

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.


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.

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é.


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


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

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.


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

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.


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.


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

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

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

-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


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

1
Comment cela résoudrait-il le problème? Notez la réponse acceptée et le code d'origine.
fuxia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.