首页  >  文章  >  后端开发  >  尽管 PHP 函数中有 echo 语句,为什么我的 WordPress AJAX 调用仍返回“0”?

尽管 PHP 函数中有 echo 语句,为什么我的 WordPress AJAX 调用仍返回“0”?

Barbara Streisand
Barbara Streisand原创
2024-10-30 19:38:03459浏览

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

如何在 WordPress 中调用 Ajax

问题

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn