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();
}
jQuery('.cl_link_buttons').val('id').click(function()
semble étrange.Réponses:
Une
0
ré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.la source
.always
pour le capturer.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:
echo
quelque chose avant d'exécuterdie
. Cela évitera les erreurs de serveur et vous aidera lors du débogage.la source
die()
sans écho quelque chose, cela va aussi vous donner un 500 Internal Server Error, et revenir0
pourwp-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 quedie()
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.die();
dans la fonction ajax dans lefunctions.php
fichier 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); });
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é.
la source
J'ai le même problème. Et je l'ai résolu. Vous devez envoyer la variable "action" comme dans l'exemple:
Parce que dans wp-admin / admin-ajax.php est le gestionnaire de la variable d'action:
la source
action
Essayez d'exécuter ce code sur la console
Je peux voir beaucoup de choses mal sur votre code JavaScript et cela pourrait être la raison.
la source
J'ai aussi eu ce problème, et c'était le fait que j'utilisais
return
plutôt queecho
dans ma fonction PHP. Le changer pour leecho
corriger.la source
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 unecho
. N'oubliez pas de passer votre action sur votre script.Pour être sûr, vérifiez si votre fonction doit utiliser
wp_ajax_nopriv
commewp_ajax
.la source
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
fait simplement taire s'il ne peut pas appeler votre méthode en dehors de$object
.la source
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:
Le fichier javascript (search.js):
la source
// fonction de code php
la source
Ceux qui obtiennent l'erreur 0 :), action => 'action'
la source
J'espère que cela vous sera utile, meilleur
la source
Essayez d'ajouter une
if
déclaration:la source