Maison  >  Article  >  développement back-end  >  Pourquoi mon appel WordPress AJAX renvoie-t-il « 0 » malgré une instruction echo dans la fonction PHP ?

Pourquoi mon appel WordPress AJAX renvoie-t-il « 0 » malgré une instruction echo dans la fonction PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 19:38:03515parcourir

Why is my WordPress AJAX call returning '0' despite having an echo statement in the PHP function?

Comment appeler Ajax dans WordPress

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn