【问题标题】:XDR ajax get request with IECorsXDR ajax 获取 IECors 的请求
【发布时间】:2013-01-11 22:33:58
【问题描述】:

我正在使用类似于下面的代码(一个非常简化的版本)执行跨域获取请求。

var addData = function() {
    $.ajax({
      type:'GET',
      url:'http://DifferentDomain.com/data.php',
      data:'body',
      success: function(data){
        $('body').html(data);
      }
    });
}

现在由于 IE 不支持 CORS,我需要使用 iecors 插件来使用 XDomainRequest,该插件效果很好,因为当 IE 使用 XHttpRequest 失败时,它会切换到 XDR

但是我遇到的问题是$('body').html(data); 这似乎只有在我在控制台中实时执行时才在 IE 中有效,而不是在第一次在 $(document).ready 上调用时才有效? (这在所有其他支持 XHR 的浏览器中都可以正常工作)

我认为这是时间问题,所以我不确定如何解决这个问题,我是否使用setTimeout() 并为 IE 浏览器运行两次?请问有人可以提供一些建议吗?提前谢谢了。

编辑

我通过 setTimeout 执行它找到了解决方法,但仍然觉得这不是最好的解决方案,例如

 setTimeout(function(){
   addData();
 },0);

【问题讨论】:

  • 你什么时候打电话?你说“加载时”,但这是什么意思?
  • 抱歉,这是由$(document).ready 调用的。我将编辑我的问题以显示这一点。
  • 啊,好吧。您是否尝试过对$.ajax 调用使用error 选项来查看是否出现任何HTTP 错误?另外,你检查过 IE 的开发者工具有没有错误?
  • 我看过了,他们都没有报告任何错误。当我第二次运行它时,IE 一切正常,所以我认为代码或访问数据文件没有任何问题。
  • 如果你把它切换到onload而不是ready会有什么不同吗?

标签: javascript jquery ajax xdomainrequest


【解决方案1】:

我通过 setTimeout 执行它找到了解决方法,但仍然觉得这不是最好的解决方案,例如

 setTimeout(function(){
   addData();
 },0);

【讨论】:

  • setTimeout 不做任何事情。我做了很多测试,发现真正的问题是 XDomainRequest 正在被垃圾收集。使用您正在使用的 JQuery XDR AJAX 传输,XDomainRequest 对象将超出范围。取决于你的运气,如果 IE8 垃圾收集器在请求完成之前运行,你会看到它消失,请求在网络跟踪中“中止”。我在这里详细描述了解决方法的问题:stackoverflow.com/questions/8058446/…
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 2012-09-26
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2015-01-13
相关资源
最近更新 更多