我试图想出这个问题让我有点头疼。要通过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);
有点长,对不起,但如果有人知道什么是错的,他们的帮助非常感谢。谢谢你的时间。
答案 0 :(得分:6)
这是因为你最终试图双重解析返回值。
显式json
数据类型和application/json
MIME类型的使用都会导致jQuery将返回的字符串解析为JavaScript对象。
因此,在这些情况下,您对JSON.parse()
的使用是多余的。