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!