Pourquoi WordPress ajoute-t-il 0 (zéro) à une réponse Ajax?

16

À moins que je ne termine la fonction de traitement Ajax par exit()ou die(), la fonction Ajax reçoit la sortie souhaitée et correcte mais en suivant par 0.

Une idée pourquoi cela se produit-il?

Est-ce que c'est censé être comme ça ou ça pourrait être corrigé?

add_action('wp_ajax_get_homepage', 'get_homepage');
add_action('wp_ajax_nopriv_get_homepage', 'get_homepage');

function get_homepage(){
    echo "get_homepage ->";
    exit();
}

J'ai lu à AJAX dans les plugins , mais pourquoi est-ce nécessaire?

Radek
la source
Est-ce que cela (l'ajout de 0) se produit même si vous êtes déconnecté de wordpress?
murdaugh
Oui, même si je ne suis pas connecté à WordPress.
Radek

Réponses:

31

La réponse par défaut de admin-ajax.phpest,

die( '0' );

... en ajoutant votre propre wp_die()ou exit()ou die()après son retour votre contenu souhaité empêche la réponse par défaut d' admin-ajax.phpêtre renvoyé aussi bien.

Cela signifie également généralement que votre appel ajax a réussi.

En fin de compte, pour répondre à votre question, c'est censé fonctionner de cette façon. Ce que vous faites en quittant après avoir renvoyé votre contenu est la bonne chose à faire.

Adam
la source
Merci pour l'explication. Donc j'utilise die () ou je vérifie à l'intérieur d'ajax pour 0 pour savoir que tout allait bien?
Radek
2
Utilisez die()ou exit()après avoir fait écho à votre contenu / données. Dans la success/completefonction de rappel de votre méthode ajax, vous pouvez ensuite manipuler les données et les utiliser pour remplir le DOM. Vous pouvez également effectuer une vérification d'erreur supplémentaire pour valider l'intégrité des données. Vous pouvez également effectuer une vérification des erreurs dans votre fonction de rappel PHP avant la sortie. En quittant essentiellement votre réponse, vous vous assurerez que vous ne vous entendez pas également 0avec elle. Soit dit en passant, ce n'est pas parce que vous recevez une 0réponse que votre appel ajax a réussi à 100%. Cependant, c'est facile à dire lorsque vous inspectez votre sortie.
Adam
1
Vous devriez utiliser wp_die()ajouté dans 2.0.4
thrillcode
@thrillcode sauf si vous avez besoin d'exposer le processus de wp_dieà d'autres plugins ou code de thème qui peuvent se connecter à ce processus, puis, en utilisant dieou exitc'est ok. Si vous avez l'intention de publier votre code en tant qu'OSS ou autrement, là où votre code doit jouer bien avec les autres, il wp_dieserait préférable, d'accord.
Adam