【问题标题】:getJSON or AJAX requests not working with IE9getJSON 或 AJAX 请求不适用于 IE9
【发布时间】:2011-09-24 18:15:39
【问题描述】:

我已经尝试解决这个问题几个小时(也在这里搜索,但没有一个解决方案有效)所以我别无选择,只能希望有人告诉我为什么会发生这种情况以及我该如何解决它。

这是一个简单的代码,适用于 Firefox,但不适用于 IE9(没有其他版本)

示例代码在这里:

http://jsfiddle.net/z5b2J/

来源是这个:

$.ajax({
  url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400",
  success: function(){
   alert('hi');
  }
});

为了测试目的,该网站不需要是真实的。

正如您在 Firefox 下的小提琴中看到的那样,会出现一个警告框,上面写着“hi”,但是如果您在 IE9 中运行完全相同的代码,则不会出现警告框。

getJSON 方法也会出现同样的情况,这对我来说是个问题,因为我想运行一些代码而不是警报,但它不会在 IE9 中运行。

【问题讨论】:

    标签: jquery ajax internet-explorer-9 getjson


    【解决方案1】:

    您尝试过使用getJSON() 代替ajax 吗?这是一个跨域请求,您正在获取 json,因此这可能是问题所在。

    现在两种浏览器都可以使用:

    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){
       alert('hi');
    });
    

    【讨论】:

    • “getJSON 方法也会出现同样的情况”是的,我试过了。
    • (记住您必须将“&callback=?”参数添加到 URL...这是一种方法,或者您可以在 $ajax 调用中指定 'jsonp' 作为数据类型。跨度>
    • 完美,你知道它为什么需要那个参数吗?
    • 该参数只是意味着它将是一个跨浏览器的 jsonp 调用。 jquery 官方文档说:“如果 URL 包含字符串“callback=?”(或类似的,由服务器端 API 定义),则请求被视为 JSONP。请参阅 $ 中对 jsonp 数据类型的讨论。 ajax() 了解更多详情。”
    【解决方案2】:

    IE9的问题在于高级缓存管理。

    如果清空IE缓存,重新运行ajax请求:第一次就可以了。

    要解决此问题,您必须发送带有“noStore = true”和“Duration = 0”或等效的 HTTP 响应。

    这是example in MVC

    【讨论】:

      【解决方案3】:

      使用$.getJSON$.ajax 还必须指定dataType 参数'jsonp'

      这里是使用 getJSON 的示例:

      var webpage = ".... your very long url ....";
      var anchor = document.createElement('a');
      anchor.href = webpage;
      // handle the multiple parameters
      anchor.search += ((anchor.search.length > 0) ? "&" : "?");
      anchor.search += "callback=?";
      
      $.getJSON(anchor.href, 'jsonp',  function(data, textStatus, jqXHR){
         alert('hi');
      });
      

      【讨论】:

      • 只有在你实际使用 jsonp 的情况下。
      【解决方案4】:

      我通过在 URL 中添加“Duration=0”解决了问题

      【讨论】:

        【解决方案5】:

        如果添加回调=?到 URL,它将被转换为类似于 callback=jQuery1820719005049791166_1366033695001 的东西。它是函数的名称,在服务器端,您应该将 json 编码对象包装在此函数调用中。所以你的响应正文不应该只是 {ok: true},而是 jQuery1820719005049791166_1366033695001({ok: true}); .它对我有用!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-21
          • 2019-12-02
          • 2014-04-26
          • 2016-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多