You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress的Code Snippets插件使用jQuery Ajax请求报400错误如何解决?

问题原因&解决步骤

1. 核心问题:JS中的PHP代码未被解析

你在JS代码中直接写<?php echo admin_url( 'admin-ajax.php' ) ?>,但Code Snippets默认不会解析独立JS代码中的PHP标签,导致最终传到前端的ajaxurl是未解析的PHP字符串,请求路径错误直接触发400。
修正方法:
将JS代码嵌入到PHP输出的前端钩子中,确保PHP代码被正常解析:

// 放在Code Snippets的PHP代码段中
add_action('wp_footer', function () {
?>
<script>
var jq = jQuery.noConflict();
jq(".c-day-content").click(function () {
    console.log ("日期选中事件处理正常...");
    let day = jq(this).text();
    day = day.replace(/[^0-9]/g,'');
    console.log("day=" + day);
    // 注意bookingStart变量要提前补充你原有初始化逻辑,避免未定义报错
    let bookingStart = '';
    bookingStart = bookingStart.concat(day);

    const ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ) ?>';
    console.log(ajaxurl);

    jq.ajax({
        url: ajaxurl,
        data: {
            action: "retrieveAttendees",
            dateSelected: bookingStart
        },
        method: 'POST',
        success: function(data) {
            console.log(JSON.stringify(data));
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("请求再次失败: " + JSON.stringify(XMLHttpRequest));
            console.log("text status: " + textStatus);
            console.log("errorThrown: " + errorThrown)
        }
    }); 
});
</script>
<?php
});

2. 后端SQL语法错误修正

你原来的$wpdb->prepare写法存在语法问题,占位符拼接百分号的方式错误,会导致数据库查询报错,修正后的PHP处理代码如下:

function retrieveAttendees_request() {
    if ( isset($_REQUEST['dateSelected'])) {
        // 补充参数过滤,避免安全问题
        $bookingDay = sanitize_text_field($_REQUEST['dateSelected']);
        global $wpdb;
        // 百分号放到参数中拼接,不要写在SQL语句里
        $sql = $wpdb->prepare(
            "select apps.bookingStart, COUNT(*) as booked 
            from wp_amelia_customer_bookings as books 
            inner join wp_amelia_appointments as apps on books.appointmentId = apps.id 
            where apps.bookingStart like %s and apps.status = 'approved' 
            GROUP BY books.appointmentId;",
            $bookingDay . '%'
        );
        $result = $wpdb->get_row($sql, ARRAY_A);
        echo json_encode($result);
    }
    // WordPress推荐用wp_die()代替die()处理Ajax请求结束
    wp_die();
}
add_action('wp_ajax_retrieveAttendees', 'retrieveAttendees_request');
add_action('wp_ajax_nopriv_retrieveAttendees', 'retrieveAttendees_request');

3. 额外验证步骤

如果修正后仍然报错,可以按以下顺序排查:

  • 打开浏览器开发者工具的「网络」标签,找到发送到admin-ajax.php的请求,确认:
    • 请求地址是正确的https://你的域名/wp-admin/admin-ajax.php
    • 请求体中存在action参数,值为retrieveAttendees
  • 确认Code Snippets中的PHP代码段已启用,且运行范围设置为「全局」

内容的提问来源于stack exchange,提问作者Gerardo C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 19:39:02