使用jquery的ajax或getJSON回调,IE上的有效json仍然失败

时间:2010-03-22 03:51:04

标签: jquery ajax json

每次我的页面加载时,我都应该创建一个数据表(也是一个jquery插件) 但是当我获取内容时,使用.ajax或.getJSON总是直接进入错误函数,甚至没有告诉我回调内部出了什么问题

$.ajax({
    cache: false,
    type: "POST",
    url: oSettings.sAjaxSource,
    data: {'newdate' : date},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(json) {
        console.log('retrieving json data');
    },

    error: function() {
        console.log("An error has occurred. Please try again.");
    }
});

这是为了安全目的而剥离回调的实际代码......

这在firefox中运行正常,它实际上执行回调函数的内容 但IE只是失败并继续编写我的日志

我已经读过很多关于IE的JSON调用失败的主要原因是只要有尾随逗号或只是格式错误的JS

但我已经使用了JSONLint并验证了我的json对象是有效的:(

2 个答案:

答案 0 :(得分:1)

试试这个

 data: '{"newdate" : "' + date + '"}',

更好的选择是使用json2.js来确保存在有效的JSON实现,然后在调用ajax之前序列化数据

var postData = JSON.stringify(data);
...
 data: postData,
...

不要依赖jquery为你做这件事。

答案 1 :(得分:1)

由于您将contentType设置为application / json,我假设您正在调用ASMX ScriptService或Page Method。在那种情况下,Sky Sanders的建议是正确的。您必须将数据参数作为JSON字符串提供;否则jQuery会错误地将对象序列化为key = value& key = value pairs。

然而,要记住的另一件事是IE在JavaScript代码尝试使用控制台对象时抛出错误,除非开发工具(我相信控制台本身)已经打开过该代码运行。当涉及console.log时,这通常是IE特定问题的原因。