当PHP响应头包含“application / json”时,JSON.parse在jQuery中失败

时间:2010-03-02 17:13:30

标签: php jquery ajax json http-headers

我试图想出这个问题让我有点头疼。要通过Ajax从PHP脚本请求一些json数据,我使用的是jQuery函数:

$.ajax({
    type: 'GET',
    cache: 'false',
    url: ajaxUrl,
    data: dataString,
    success: updatePage
});

如果我将PHP标头中的content-type设置为:

header('Content-type: application/json');

然后我从服务器得到的回复如下:

{"content":"new content"}

内容类型自动设置为text / html。当jQuery ajax选项中的dataType未设置时,它使用默认的“智能猜测”。我强烈假设jQuery将响应数据识别为json,因为updatePage被解析为一个对象。 updatePage使用JSON js库(json2.js),并执行此操作:

function updatePage(data) {
  $dataObj = JSON.parse(data); 
}

当ajax成功调用该函数时,一切正常。没有错误。 这是奇怪的事情,如果我将头设置为application / json,如上所述,JSON.parse突然报告错误。如果我在jQuery ajax请求中将我的dataType设置为'json',则会发生完全相同的错误。我在更改这些内容时从PHP脚本获得的响应与上面的内容完全相同。 Firebug中的错误如下所示:

JSON.parse
  $dataObj = JSON.parse(data); 

有点长,对不起,但如果有人知道什么是错的,他们的帮助非常感谢。谢谢你的时间。

1 个答案:

答案 0 :(得分:6)

这是因为你最终试图双重解析返回值。

显式json数据类型和application/json MIME类型的使用都会导致jQuery将返回的字符串解析为JavaScript对象。

因此,在这些情况下,您对JSON.parse()的使用是多余的。