IE7没有消化JSON:“解析错误”

时间:2010-03-13 18:12:35

标签: ajax django json jquery

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

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

最奇怪的部分是:

  1. 我的JSON(s)在JSONlint上验证
  2. 仅在IE7上失败...它适用于Safari,Chrome和所有版本的Firefox(甚至在IE8中)。如果我使用'错误',那么它会报告“parseError”...即使它验证了!
  3. 有什么我想念的吗? IE7是否不处理某些字符,数据结构(我的数据没有任何非字母数字,但它有嵌套的JSON)?我已经使用了大量其他AJAX调用(即使在IE7中),但是除了这个调用之外。

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

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

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

    修改的 这是我正在使用的虚拟数据的SIMPLEST案例的副本......它仍然在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,因此我认为这不会导致它)

    有人还有其他想法吗?

3 个答案:

答案 0 :(得分:2)

您提供的示例数据看起来没问题,但我强烈怀疑的是,这样的地方有一个未封闭的逗号:

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

IE是唯一(正确)浏览此浏览器的浏览器。

如果不是这样,您是否可以显示完整的数据样本(或确认您显示的示例确实是完整样本)?

答案 1 :(得分:1)

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

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

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

您是否返回了正确的内容类型标头? e.g。

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

答案 2 :(得分:1)

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

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

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