IE中的jQuery AJAX请求失败

Sam*_*Sam 38 jquery internet-explorer json

以下AJAX调用在IE中失败.

$.ajax({
    url:"{{SITE_URL}}/content/twitter.json",
    dataType:"json",
    error:function(xhr, status, errorThrown) {
        alert(errorThrown+'\n'+status+'\n'+xhr.statusText);
    },
    success:function(json) {
               ...Snip...
    }
});
Run Code Online (Sandbox Code Playgroud)

错误函数返回

Undefined
parsererror
OK
Run Code Online (Sandbox Code Playgroud)

没有请求服务器,所以我认为它不是JSON的问题.

固定,见#1351389

Sam*_*Sam 51

修复了,我将内容类型从简单application/json; charset=utf8改为普通application/json.
我讨厌IE :)

另外要避免IE超级缓存试试这个:

var d = new Date();
$.ajax({
        url:"{{SITE_URL}}/content/twitter.json?_="+d.getTime(), 
...Snip...
Run Code Online (Sandbox Code Playgroud)

这样每个请求都是IE获取的新URL:D

  • 上帝,我很高兴我找到了答案.这件事花了我几天的生命,微软不会给我回馈.只是重申:我也讨厌恨IE. (27认同)
  • 亲爱的IE,我恨你.亲爱的@Sam,我爱你. (14认同)
  • 我也讨厌IE:D (5认同)

tan*_*hos 48

对于缓存问题,为什么不简单地使用cache: false参数?

$.ajax({ 
    url: "yoururl",
    cache: false,
    ....
Run Code Online (Sandbox Code Playgroud)

  • 对我来说这似乎很奇怪,默认情况下这不会设置为"false"... (2认同)

Jav*_*ier 8

这是复制/粘贴吗?让我一直得到的一件事就是在对象构造函数中留下最后一个','.也就是说,大多数浏览器JS接受:

o = { a:1, b:2, c:3, };
Run Code Online (Sandbox Code Playgroud)

但是因为最后一项之后的逗号,IE会因此而窒息.将其更改为:

o = { a:1, b:2, c:3 };
Run Code Online (Sandbox Code Playgroud)

它的工作原理.


Jav*_*ock 6

在较新版本的Internet Explorer(IE7)中,必须在调用$ .ajax之前编写下一行,否则它将永远不会调用该函数:

$.ajaxSetup({ cache: false }); //this line before $.ajax!!!
$.ajax({
    //codes
    //codes
    //codes
});
Run Code Online (Sandbox Code Playgroud)