【问题标题】:JSON.parse fails in jQuery when PHP response-header contains "application/json"当 PHP 响应头包含“application/json”时,JSON.parse 在 jQuery 中失败
【发布时间】:2011-01-22 20:02:00
【问题描述】:

试图弄清楚这一点让我有点头疼。要通过 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 成功调用该函数时,一切正常。没有错误。 奇怪的是,如果我像上面一样将header设置为application/json,JSON.parse会突然报错。如果我在 jQuery ajax 请求中将我的 dataType 设置为“json”,则会发生完全相同的错误。更改这些内容时,我从 PHP 脚本得到的响应与上面的完全一样。 Firebug 中的错误如下所示:

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

有点长,抱歉,但如果有人知道出了什么问题,他们的帮助将不胜感激。感谢您的宝贵时间。

【问题讨论】:

  • 我不明白(甚至看不到)错误...
  • 我建议使用 console.log(data) 转储来自服务器的内容...看看它是否看起来不同。您发布的那个错误不是很有启发性。
  • Dancrumb 呈现: Object { content="content":"new content" } JSON.parse [打破这个错误] $dataObj = JSON.parse(data);也没多大帮助

标签: php jquery ajax json http-headers


【解决方案1】:

这是因为您最终尝试对返回值进行双重解析。

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

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

【讨论】:

  • 天哪,你是绝对正确的,不敢相信我错过了那个。谢谢
  • 我明白了,伙计。有时您只需要第二双眼睛。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2013-09-08
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多