试图解决这个问题时我有点头疼。要通过 Ajax 从 PHP 脚本请求一些 json 数据,我使用 jQuery 函数:
$.ajax({
type: 'GET',
cache: 'false',
url: ajaxUrl,
data: dataString,
success: updatePage
});
如果我不将 PHP header 中的内容类型设置为:
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成功调用该函数时,一切正常。没有错误。 奇怪的是,如果我将 header 设置为上面的 application/json,JSON.parse 突然报告错误。如果我在 jQuery ajax 请求中将 dataType 设置为“json”,则会发生完全相同的错误。更改这些内容时,我从 PHP 脚本得到的响应看起来与上面的一模一样。 Firebug 中的错误如下所示:
JSON.parse
$dataObj = JSON.parse(data);
有点长,抱歉,但如果有人知道出了什么问题,我们将非常感谢他们的帮助。感谢您抽出时间。
最佳答案
这是因为您最终尝试双重解析返回值。
显式的 json
数据类型和 application/json
MIME 类型的使用都会导致 jQuery 将返回的字符串解析为 JavaScript 对象。
因此,在这些情况下,您使用 JSON.parse()
是多余的。
关于php - 当 PHP 响应 header 包含 "application/json"时,JSON.parse 在 jQuery 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2365120/