Maison > Article > développement back-end > Pourquoi mon appel WordPress AJAX renvoie-t-il « 0 » malgré une instruction echo dans la fonction PHP ?
Problème
Un appel AJAX renvoie systématiquement « 0 » comme sortie, laissant » le développeur perplexe. Le fichier function.php contient le code suivant :
<code class="php">function get_data() { $abc = '1'; $result = $wpdb->get_results("SELECT * FROM " . $wpdb->options . " WHERE option_name LIKE '_transient_%'"); echo $result; // Outputting this value but still displays 0 wp_die(); } add_action('wp_ajax_nopriv_get_data', 'get_data'); add_action('wp_ajax_get_data', 'get_data');</code>
Pendant ce temps, l'appel AJAX est effectué via JavaScript :
<code class="javascript">$('body').on("click", ".re-reset-btn", function(e) { var panel = $('#re-compare-bar'); $.ajax({ type : "GET", dataType : "json", url : "/wp-admin/admin-ajax.php", data : {action: "get_data"}, success: function(response) { alert("Your vote could not be added"); alert(response); } }); $("#re-compare-bar-tabs div").remove(); $('.re-compare-icon-toggle .re-compare-notice').text(0); });</code>
Malgré la tentative de sortie de la variable $abc, le résultat reste '0'.
Solution
Dans WordPress, la variable globale ajaxurl est fournie par défaut pour les appels AJAX. Cependant, cette variable n'est pas définie dans le frontend. Pour utiliser les appels AJAX dans le frontend, vous devez définir ajaxurl manuellement.
Une approche recommandée consiste à utiliser wp_localize_script. Considérez que vos appels AJAX résident dans "my-ajax-script.js", ajoutez wp_localize_script comme suit :
<code class="php">function my_enqueue() { wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') ); wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } add_action( 'wp_enqueue_scripts', 'my_enqueue' );</code>
Une fois votre fichier JS localisé, vous pouvez accéder à l'objet my_ajax_object dans votre fichier JS et modifier votre appel AJAX en conséquence :
<code class="javascript">jQuery.ajax({ type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: formData, success: function(msg){ console.log(msg); } });</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!