【问题标题】:jquery throws SyntaxError with valid JSON responsejquery 抛出带有有效 JSON 响应的 SyntaxError
【发布时间】:2014-01-15 13:15:21
【问题描述】:

所以我有一个 ajax 函数与返回 json_encode 的 php 文件通信。

ajax函数:

$.ajax({            
        type: 'POST',
        data: sendData,
        dataType: 'json',
        mimeType: "application/json",
        url: 'request.php',                 
        success: function(data){
            return data;
        }
    });

sendData 是这样的:

{ 'action': 'do_stuff', 'id': 5 }

结果是

{"affected_rows":1,"insert_id":0}

我检查了结果中是否有奇怪的终止字符或填充,但什么也没找到。有趣的是,抛出的错误是“Uncaught SyntaxError: Unexpected token o”,这很奇怪,因为结果不是以 o 开头或结尾,而唯一的 o 在中间。

我也尝试过不定义数据或 mime 类型,并使用 JSON.parse(data); 手动解析 json;和 jQuery.parseJSON(data);没有成功。

如果有帮助,request.php 会像这样返回它的数据:

        $a = $_POST[action];
        $result = call_user_func_array($a, $_POST);
        if($result){
            echo json_encode( $result );
        }else{
            echo json_encode( 'There was an error processing your request (Error: '.get_error_id($a).')'  );
        }

【问题讨论】:

  • 您是否尝试将 error_reporting 设为 0?它可能会生成一些通知或警告,当您在浏览器开发人员工具中分析页面请求时,您会得到什么响应?

标签: php jquery ajax json


【解决方案1】:

错误消息Uncaught SyntaxError: Unexpected token o 似乎与 JSON 有效或无效无关。

您确定没有其他 AJAX 回调配置为运行吗? (在 AJAX 全局设置中?)

我假设错误表明 JavaScript 格式错误(不是无效的 JSON)...

【讨论】:

  • 是的,上面的脚本执行后可能有另一个脚本抛出错误
  • @JosephPersie:我对您的评论说同样的话 - “确实,在 JSON 内容之前可能会有一些 PHP 通知或警告。” :-)(我赞成你的评论......)
  • 经过太久的搜索,我发现我试图解析 JSON 两次。这就是我复制/粘贴旧代码所得到的。谢谢!
【解决方案2】:

试着放:

header("Content-Type: text/javascript");

之前:

if($result) {

【讨论】:

  • 例外响应为 JSON 格式,官方注册的 MIME 类型称为application/json
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多