問題
AJAX 調用總是產生“0”下開發商疑惑不已。 functions.php 檔案包含以下程式碼:
<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>
同時,AJAX 呼叫是透過 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>
儘管嘗試輸出變數 $abc,但結果保持 '0'。
解
在 WordPress 中,預設為 AJAX 呼叫提供全域變數 ajaxurl。然而,這個變數沒有在前端定義。要在前端使用 AJAX 調用,您需要手動定義 ajaxurl。
建議的方法是使用 wp_localize_script。考慮到您的AJAX 呼叫位於「my-ajax-script.js」中,請新增wp_localize_script,如下所示:
<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>
JS 檔案在地化後,您可以存取JS 檔案中的my_ajax_object 物件並修改您對應的AJAX 呼叫:
<code class="javascript">jQuery.ajax({ type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: formData, success: function(msg){ console.log(msg); } });</code>
以上是儘管 PHP 函數中有 echo 語句,為什麼我的 WordPress AJAX 呼叫仍回傳「0」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!