IE7 不消化 JSON:“解析错误”

Posted

技术标签:

【中文标题】IE7 不消化 JSON:“解析错误”【英文标题】:IE7 not digesting JSON: "parse error" 【发布时间】:2011-01-27 05:17:30 【问题描述】:

在尝试获取 JSON 时,我的回调函数没有触发。

$.ajax(
    type:"GET",
    dataType:'json',
    url: myLocalURL,
    data: myData,
    success: function(returned_data)  
        alert('success');
    
);

最奇怪的是:

    我的 JSON 在 JSONlint 上验证 这仅在 IE7 上失败...它适用于 Safari、Chrome 和所有版本的 Firefox(甚至在 IE8 中)。如果我使用“错误”,那么它会报告“parseError”......即使它验证了!

我有什么遗漏的吗? IE7 是否不处理某些字符、数据结构(我的数据没有任何非字母数字,但它确实有嵌套的 JSON)?我已经使用了大量其他所有都可以工作的 AJAX 调用(即使在 IE7 中),但除了 THIS 调用。

这里的一个示例数据返回是:(这是一个结构完整的示例,这意味着它只缺少几个第二层字段,但遵循这个确切的层次结构)

"question":
             "question_id":"19",
             "question_text":"testing",
             "other_crap":"none"
            ,
  "timestamp":
              "response":"answer",
              "response_text":"the text here"
              

我完全不知所措。希望有人对正在发生的事情有所了解...谢谢!

编辑 这是我正在使用的最简单的虚拟数据案例的副本......它仍然无法在 IE7 中工作。


  "question":
         "question_id":"20",
         "question_text":"testing :",
         "adverse_party":"none",
         "juris":"California",
         "recipients":"Carl Chan"
         

我开始怀疑这是一个 JSON 问题……但我不知道还有什么问题。以下是我发现可能是原因的其他一些资源,但它们似乎也不起作用: http://firelitdesign.blogspot.com/2009/07/jquerys-getjson.html(Django 默认使用 Unicode,所以我不认为这是造成的)

有人有其他想法吗?

【问题讨论】:

你用的是什么版本的jQuery? 这是 jQuery 1.4.1。我知道 1.4.2 已经发布,但它与 qTip(我也在使用的一些不错的 jQuery 工具提示)冲突,并且由于截止日期而时间紧迫。 > 那么这个错误一定与load customfilter 有关,您是否尝试使用十六进制编辑器查看生成的 json 以检查其中是否有一些奇怪的值,例如BOM 标记或类似标记 【参考方案1】:

您提供的示例数据看起来不错,但我仍然强烈怀疑在这样的地方有一个未闭合的逗号:

 "timestamp":
              "response":"answer",
              "response_text":"the text here"
              , <------------

IE 是唯一(正确)跳过此问题的浏览器。

如果不是这样,您能否展示一个完整的数据样本(或确认您展示的示例确实是一个完整的样本)?

【讨论】:

感谢您的建议!我可以确认这是一个完整的示例(减去一些第二层字段)。让我通过在每个 JSON 的最后一个键值中添加逗号来尝试您的建议。 不,Pekka 的意思是你不能在最后一个元素上使用逗号。 IE 会拒绝它。 哈哈哦,我明白了...不,结尾肯定没有逗留的逗号。 @Kenny 很奇怪。有什么方法可以从 JSON 解释器获取更详细的错误信息?恐怕我不熟悉它。输入中的任何特殊字符 - 引号、非英文字符? @Pekka 我当然希望可以。问题是这是 IE7 ......所以 Firebug 将无法工作。它也适用于 IE8,所以我也不能使用 IE8 的调试器。我附上了原始帖子中传递的虚拟数据的真实副本。【参考方案2】:

您是否已经排除了缓存问题的可能性?

例如当myLocalURL 返回无效的 json 时,您使用 IE7 进行了测试。 IE7 仍然缓存该响应,因此它不起作用。尝试将这样的内容(例如,如果是 php)添加到 myLocalURL 或使 myLocalURL 看起来像 myLocalURL?random=123 只是为了测试以确保它不是缓存的东西

header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");

您是否返回了正确的内容类型标头?例如

header("Content-Type: application/json");

【讨论】:

虽然我们使用的是Python,但感谢您的建议!我认为这也可能是缓存问题...所以我打开了开发人员工具栏并打开了“始终从服务器刷新”。更不用说我已经在几台不同的计算机上尝试过,结果都一样。所以它不可能是客户端缓存。我正在使用允许 contentType: "application/json" 的 $.ajax,因此也涵盖了基础。【参考方案3】:

我刚刚遇到了完全相同的问题。事实证明,IE7 无法解析响应正文中具有前导 \r\n 换行符的 JSON 响应。您删除 % load customfilter % 的修复工作有效,因为您删除了包含在此标记之后的新行。

另一种解决方法是删除新行以获取

% load customfilter % "question": "question_id":"question.id",
           "question_text":"question.question_text|customfilterhere"
         

【讨论】:

感谢您的回答!!虽然现在测试为时已晚,但如果你说的是真的,我不会感到惊讶。 IE7!!!!!!!拳头摇> IE 简直糟透了,一遍又一遍。我经历了无数个小时在旧版 IE 中制作废话。恨得这么惨。对不起,没用的帖子,我愿意失去一些 *** 积分,并被允许在这个帖子上发泄。对不起。 作为记录,以下文本是 OP 的修复:“问题原来是 IE7 和 Django 之间的一个奇怪错误 [...]。我们基本上使用 Django 模板语言来生成我们的JSON...在这个特定的 JSON 中,我们使用了自定义模板标签: % load customfilter % "question": "question_id":"question.id" , "question_text":"question.question_text|customfilterhere" 一旦我删除了与 customfilter 相关的任何内容,IE7 就能够完美解析 JSON![...]"

以上是关于IE7 不消化 JSON:“解析错误”的主要内容,如果未能解决你的问题,请参考以下文章

Qt json解析错误

json解析错误怎么办?

json 解析错误的问题

导入json文件导致HttpClient的解析错误

JSON 解析错误获取 brautaset.JSON 错误

JSON解析错误语法错误意外结束输入