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

WordPress自定义插件AJAX请求JSON语法错误修复求助

解决WordPress自定义插件JSON解析错误:Uncaught SyntaxError: Unexpected token A in JSON at position 0

这个错误很典型——你的AJAX请求返回的内容不是合法的JSON格式,开头的"A"就是关键线索(比如可能是"Access..."、"Alert..."或者PHP错误提示的开头)。下面我给你一步步的调试思路和修复方案:

第一步:先查看AJAX返回的原始内容

先修改你的JS代码,在解析JSON之前打印原始响应,搞清楚到底返回了什么:

// 替换ajaxForm和byp函数里的always回调部分
.always(function(data){
    console.log('原始AJAX响应内容:', data); // 先打印原始数据,排查问题
    try {
        var parsedData = $.parseJSON(data);
        responser(parsedData);
    } catch (e) {
        console.error('JSON解析失败:', e);
        // 即使解析失败,也要确保隐藏加载器,避免页面卡住
        $(document).find('.byp-backdrop, .byp-loader').fadeOut();
    }
});

刷新页面触发请求,打开浏览器控制台(F12),查看打印出来的data内容——大概率会看到HTML、PHP错误提示(比如Notice/Warning)或者一段非JSON的文本,这就是问题根源。

第二步:排查PHP端的输出问题

WordPress插件的AJAX响应必须是纯JSON,不能有任何额外输出,常见坑点:

  1. PHP错误信息破坏JSON:如果你的PHP处理函数里有未定义变量、调用不存在的函数,会输出Notice/Warning,这些文本会加在JSON前面,直接导致解析失败。
    • 解决:打开PHP错误日志,或者在开发环境开启错误显示,修复这些错误;也可以在AJAX处理函数开头临时加error_reporting(0);屏蔽错误(但建议还是从根源修复错误)。
  2. 多余的输出内容:比如PHP文件开头/结尾有空格、换行,或者处理函数里用了echo/var_dump之类的调试代码,甚至自定义页面模板的其他HTML内容被意外输出了。
    • 解决:
      • 用WordPress官方的wp_send_json()函数代替手动echo json_encode()——这个函数会自动设置正确的Content-Type头,并且自动终止输出(避免后续内容被输出):
        // 示例:PHP端返回响应
        $response = [0, '.target-element', '更新的内容'];
        wp_send_json($response); // 这行之后不需要再写die()或exit()
        
      • 如果是在自定义页面模板里处理AJAX,要先判断是不是AJAX请求,只有AJAX请求时才输出JSON,否则正常渲染页面:
        if (isset($_POST['ajax-request']) && $_POST['ajax-request'] === 'byp') {
            // 处理AJAX逻辑
            wp_send_json($response);
        }
        // 下面是正常页面的HTML渲染代码
        
  3. UTF-8 BOM问题:如果你的PHP文件是用带BOM的UTF-8编码保存的,文件开头会有一个隐藏的字节标记,导致输出额外字符破坏JSON。
    • 解决:用编辑器(比如Notepad++、VS Code)把文件编码改成UTF-8 无BOM。

第三步:验证AJAX请求的目标URL

你的代码里用了window.location.href作为AJAX的URL,如果这个页面模板本身会输出HTML,那POST请求到这个URL时,服务器会返回整个页面的HTML,而不是纯JSON——这也会导致解析错误。

  • 解决:最好改用WordPress标准的admin-ajax.php来处理AJAX请求,或者确保自定义页面在处理AJAX请求时只返回JSON,不输出页面内容。

快速测试小技巧

打开浏览器的Network标签(F12),触发AJAX请求,找到对应的POST请求,查看Response标签里的内容:

  • 如果看到的是HTML页面、错误提示或者非JSON文本,直接去PHP端找对应的输出源;
  • 如果是合法的JSON,那可能是JS解析时的其他问题,但根据你的错误提示,这种概率很低。

内容的提问来源于stack exchange,提问作者Shashikant Rohit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:27:53