jQuery IE9 JSON.SyntaxError parseerror,但JSON有效

时间:2011-08-24 21:48:00

标签: jquery ajax json internet-explorer internet-explorer-9

我有一些jQuery(1.6.2,最新的稳定)代码,它可以在Chrome,Firefox,Safari,IE7和IE8中运行......但是IE9无法解析我的json ajax响应。 json是有效的,我通过http://jsonlint.com/

运行它
$.ajax({
    url: lookupURL,
    dataType: "json",
    cache: false, // don't cache the result
    contentType: "application/json", //tell the server we're looking for json
    success: function(data) {
        // do stuff with result
    },
    error: function(xhr, errorString, exception) {
        alert("xhr.status="+xhr.status+" error="+errorString+" exception=|"+exception+"|");
    }
});

错误处理程序是一个jQuery调用(仅限IE9)。 xhr.status = 200,errorString = parseerror和exception = SyntaxError JSON.parse

我的json是有效的,我甚至使用最终简单的json字符串进行检查:

{"foo":"bar"}

我已经使用xhr.responseText验证了json上没有前导或尾随空格。

为什么在IE9中失败?

2 个答案:

答案 0 :(得分:2)

发现问题。我正在使用的系统是一个相当大的CMS和电子商务框架,因此他们在自己的库中有很多javascript。在他们的一个js库中,他们正在替换全局JSON对象并提供他们自己的JSON.parse实现。看起来它是来自json.org的旧版和/或黑客版json2。当我试图更早地解决问题时,我曾尝试安装json2作为JSON对象无济于事......但事实证明他们随后用我们的json2破坏了它。我将json2的安装移动到最后加载的javascript,现在它正在运行。我不知道IE9是唯一受影响的人......但是你去了。

答案 1 :(得分:1)

您可以尝试几种方法,但首先要删除contentType,因为我认为您不需要它来解决您的错误。

1)从这里开始:http://api.jquery.com/jQuery.ajax/ dataType“从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的数据转换为你需要的数据类型。”所以你可以尝试将dataType作为'text json'

2)你的json是否被修剪(周围没有空格)?

3)你有没有尝试过(至少作为测试)使用getJSON()?