Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah panggilan AJAX WordPress saya mengembalikan \'0\' walaupun mempunyai pernyataan gema dalam fungsi PHP?

Mengapakah panggilan AJAX WordPress saya mengembalikan \'0\' walaupun mempunyai pernyataan gema dalam fungsi PHP?

Barbara Streisand
Barbara Streisandasal
2024-10-30 19:38:03459semak imbas

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

Cara Menggunakan Ajax dalam WordPress

Masalah

Panggilan AJAX secara konsisten menghasilkan '0' sebagai outputnya, meninggalkan pemaju hairan. Fail functions.php mengandungi kod berikut:

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

Sementara itu, panggilan AJAX dibuat melalui 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>

Walaupun percubaan untuk mengeluarkan pembolehubah $abc, hasilnya kekal '0'.

Penyelesaian

Dalam WordPress, ajaxurl pembolehubah global disediakan secara lalai untuk panggilan AJAX. Walau bagaimanapun, pembolehubah ini tidak ditakrifkan dalam bahagian hadapan. Untuk menggunakan panggilan AJAX di bahagian hadapan, anda perlu mentakrifkan ajaxurl secara manual.

Pendekatan yang disyorkan ialah menggunakan wp_localize_script. Pertimbangkan bahawa panggilan AJAX anda berada dalam "my-ajax-script.js", tambah wp_localize_script seperti berikut:

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

Setelah fail JS anda disetempatkan, anda boleh mengakses objek my_ajax_object dalam fail JS anda dan mengubah suai panggilan AJAX anda dengan sewajarnya:

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

Atas ialah kandungan terperinci Mengapakah panggilan AJAX WordPress saya mengembalikan \'0\' walaupun mempunyai pernyataan gema dalam fungsi PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn