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

Barbara Streisand
Lepaskan: 2024-10-30 19:38:03
asal
456 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!