【问题标题】:jQuery AJAX request failing in IEjQuery AJAX 请求在 IE 中失败
【发布时间】:2009-01-08 20:47:51
【问题描述】:

以下 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...
    }
});

错误函数返回

Undefined
parsererror
OK

没有向服务器发出请求,所以我认为 JSON 没有问题。

已修复,请参阅 #1351389

【问题讨论】:

  • 它在其他浏览器上运行?

标签: json internet-explorer jquery


【解决方案1】:

已修复,我将内容类型从 application/json; charset=utf8 更改为纯 application/json
我讨厌 IE :)

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

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

这样每个请求都是一个新的 url 供 IE 获取 :D

【讨论】:

  • 上帝,我很高兴我找到了这个答案。这件事让我失去了几天的生命,微软不会给我回报。重申一下:我也讨厌 IE。
  • 亲爱的 IE,我恨你。亲爱的@Sam,我爱你。
  • 也可以使用 jQuery.Ajax 选项“缓存”。 api.jquery.com/jQuery.ajax/#options 如果设置为 false,将强制浏览器不缓存请求的页面。将缓存设置为 false 还会将查询字符串参数“_=[TIMESTAMP]”附加到 URL。
  • 我正在挂断字符集声明
  • 感谢您的解决方案!为所有 IE 仇恨者 +1
【解决方案2】:

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

$.ajax({ 
    url: "yoururl",
    cache: false,
    ....

【讨论】:

  • 干杯,为我解决了!我很好奇为什么 IE 实际上并没有使用它缓存的版本...
  • 谢谢,这让我有些困惑!在 Firefox 上运行良好,但在 IE 中不行。
【解决方案3】:

这是复制/粘贴吗?一直让我感动的一件事是将最后一个“,”留在对象构造函数中。也就是大部分浏览器JS都接受:

o = { a:1, b:2, c:3, };

但 IE 对此感到窒息,因为最后一项之后的逗号。将其更改为:

o = { a:1, b:2, c:3 };

它有效。

【讨论】:

  • 男人 - 你是个怪胎 :) 你为我节省了很多时间。请注意,这只破坏了 IE7 及以下版本。从 IE8 开始,这不是上升错误。
【解决方案4】:

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

$.ajaxSetup({ cache: false }); //this line before $.ajax!!!
$.ajax({
    //codes
    //codes
    //codes
});

【讨论】:

    【解决方案5】:

    IE 非常积极地缓存 AJAX 请求(无论如何,比 Firefox 更多)。如果这不适合您的站点,则需要在响应中适当地设置 Cache-Control 标头。

    【讨论】:

    • 好点,我在末尾添加了?_=1234,即现在每次都请求页面。不过还是一样的问题:(
    【解决方案6】:

    静态生成的 JSON 和 IE 的一个主要问题是前面的“逗号”,例如这会在 IE 中引发错误:

    {
        "one":"hello",
        "two":"hi",
     }
    

    注意最后一个逗号。

    【讨论】:

      【解决方案7】:

      {{SITE_URL}} 块的提供是关于什么的。尝试查看浏览器源代码中的代码。如果 {{SITE _URL}} 块有一个斜杠,这将使请求 url:

      http://modomain.com//content/twitter.json

      哪个可以让 IE 出局?

      【讨论】:

      • 好吧,我所知道的任何浏览器都会对此感到不安......所以这不是特定的 IE 问题。
      【解决方案8】:

      IE:JSON 未定义错误已解决

      http://funkatron.com/site/comments/safely-parsing-json-in-javascript/

      通过使用 dataType: "json" 并避免解析

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多