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