使用PHP的json_encode时,JQuery会出现JSON语法错误

时间:2013-10-21 12:14:11

标签: javascript php jquery ajax json

我有一个应用程序使用JQuery $ .ajax将JSON编码数据发送到我处理它的服务器,然后发回JSON编码的结果。问题是,当我想处理响应时,JQuery会给出一个解析错误。 (好像PHP的json_encode函数输出无效的JSON格式)。 代码如下:

Javascript代码:

$.ajax({
     type: 'POST',
     url: URL+'pages/processListUIAjaxRequest',
     data:{filters: filters, rebuild_params: $('#rebuild_params\\['+unique+'\\]').val()},
     dataType: 'json',
     success: function(response){
          alert(response);
     },
     error: function(request, status, error){
          alert('Unable to update table contents');
          console.log(request);
          console.log(status);
          console.log(error);
     }
});

这是输出响应的PHP代码片段:

$response->addResult($uFilters);
header('Content-Type: application/json');
$response->toJSON(true);

$ uFilters是一个简单的数组,$ response对象的toJSON方法在这里:

public function toJSON($output = false){
        $out = array();

        if($this->hasErrors()){
            $out['has_error'] = true;
            $out['errors'] = $this->getErrors();
        } else $out['has_error'] = false;
        $out['result'] = $this->_result;

        if($output){
            echo json_encode($out);
        }else{
            return json_encode($out);
        }
    }// toJSON

每次运行代码时,我都会得到“无法更新表格内容”,并且在JavaScript控制台上我有:

  

'SyntaxError:JSON.parse:意外字符'

尽管我将dataType定义为:'json'并且输出是PHP的json_encode'd。在JavaScript控制台上,我可以看到响应文本是:

"{"has_error":false,"result":{"page_id":"xxx"}}" 

尝试复制此内容并使用在线JSON验证工具进行验证,有趣的是它有效几次并且几次无效(没有任何一致性)我有点困惑。 试图使用其他标题,如:

header('Content-Type: text/json'); 
header('Content-Type:javascript/json');
header('Content-Type: application/json');

或没有标题,但没有。

如果我将JQuery ajax请求的dataType编辑为'text'(尽管输出是JSON格式的,甚至标题表示它是JSON内容),那么成功处理程序运行并且我得到了正确的响应。在这种情况下,当我尝试$ .parseJSON(响应)时会出现同样的问题。

出了什么问题?我的JSON字符串真的无效吗?

1 个答案:

答案 0 :(得分:2)

调试您的响应以查看哪些字符使其无效。将dataType设置为text并转义返回的文本。

dataType: 'text',
success: function(response){
    console.log(escape(response));
},

您将看到返回的字符,可能有一些奇怪的返回字符,这是一个问题。