Jquery ajax()跨域远程服务器在IE8中不起作用[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jquery ajax()跨域远程服务器在IE8中不起作用[重复]相关的知识,希望对你有一定的参考价值。

我有一个脚本,它向远程服务器发出ajax请求,返回纯文本响应。除了IE8(震撼)之外,它在所有浏览器中都能正常工作。

这是代码:

$.ajax({
  url: 'abc.com/?somerequest=somevalue',
  cache: false,
  type: 'POST',
  data:{
    sub: 'uploadprogress',
    uploadid: this.uploadId
  },
  dataType: 'html',
  success: this.uploadProgressResp,
  error: this.errorResp
});

在IE8中,它返回“无传输”错误。我想这是因为IE8不允许跨域请求?

注意:我没有为远程服务器编写API。如果我这样做,我会返回JSON响应而不是纯文本响应。所以是的,dataType应该是HTML而不是JSON。

答案

尝试在ajax调用之前将其添加到某处 - 最好的位置是在执行任何其他javascript之前!

jQuery.support.cors = true;

如果没有这个,Internet Explorer将抛出“无传输”错误。错误消息本身相当令人困惑,但默认情况下,跨域ajax请求被IE阻止,但其他浏览器看起来并非如此 - 或者至少Chrome和Firefox会起到这种作用。

历史上,我在这个问题上分享了你的痛苦。相信它会对你的问题进行排序。

另一答案

我知道这是一个非常古老的问题,但遗憾的是人们仍在使用IE8 / 9,有时我们必须支持它们:/

这是我能找到的最佳解决方案:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

只需在您的html中包含以下脚本即可,您不必修改jQuery请求中的任何内容

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>

限制:

  • 不支持IE6 / 7,仅支持IE8和IE9
  • 最小jQuery版本是1.5
  • 在IE8 / 9中使用POST方法时,Content-Type标题始终设置为text/plain
  • 当前网站和请求的URL都必须使用相同的协议(HTTP-> HTTPS或HTTPS-> HTTP请求不起作用)

以上是关于Jquery ajax()跨域远程服务器在IE8中不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery的Ajax跨域请求的

jQuery跨域ajax:执行时回调

如何解决IE8下Ajax调用时跨域的问题

JQuery - $.ajax() - 使用 JSONP 的跨域 - 仅在 IE 8 中获取“解析器错误”(在 IE 7 中工作)

JQuery的Ajax跨域请求的解决方式

JQuery的Ajax跨域请求原理概述及实例