Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt mein WordPress-AJAX-Aufruf „0“ zurück, obwohl die PHP-Funktion eine Echo-Anweisung enthält?

Warum gibt mein WordPress-AJAX-Aufruf „0“ zurück, obwohl die PHP-Funktion eine Echo-Anweisung enthält?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 19:38:03459Durchsuche

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

So rufen Sie Ajax in WordPress auf

Problem

Ein AJAX-Aufruf liefert durchweg „0“ als Ausgabe und verlässt Der Entwickler war verwirrt. Die Datei „functions.php“ enthält folgenden Code:

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

Mittlerweile erfolgt der AJAX-Aufruf über 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>

Trotz des Versuchs, die Variable $abc auszugeben, das Ergebnis bleibt '0'.

Lösung

In WordPress wird die globale Variable ajaxurl standardmäßig für AJAX-Aufrufe bereitgestellt. Allerdings ist diese Variable im Frontend nicht definiert. Um AJAX-Aufrufe im Frontend zu nutzen, müssen Sie Ajaxurl manuell definieren.

Ein empfohlener Ansatz ist die Verwendung von wp_localize_script. Bedenken Sie, dass sich Ihre AJAX-Aufrufe in „my-ajax-script.js“ befinden. Fügen Sie wp_localize_script wie folgt hinzu:

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

Sobald Ihre JS-Datei lokalisiert ist, können Sie auf das my_ajax_object-Objekt in Ihrer JS-Datei zugreifen und Änderungen vornehmen Ihr AJAX-Aufruf entsprechend:

<code class="javascript">jQuery.ajax({
    type: "post",
    dataType: "json",
    url: my_ajax_object.ajax_url,
    data: formData,
    success: function(msg){
        console.log(msg);
    }
});</code>

Das obige ist der detaillierte Inhalt vonWarum gibt mein WordPress-AJAX-Aufruf „0“ zurück, obwohl die PHP-Funktion eine Echo-Anweisung enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn