【问题标题】:IE7 not digesting JSON: "parse error"IE7 不消化 JSON:“解析错误”
【发布时间】:2025-11-24 02:40:01
【问题描述】:

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

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

最奇怪的是:

  1. 我的 JSON 在 JSONlint 上验证
  2. 这仅在 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 标记或类似标记

标签: ajax django json jquery


【解决方案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![...]"