问题
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中文网其他相关文章!