问题 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。

RANT:我讨厌IE,希望它能从地球上消失


7619
2018-02-16 15:51


起源

你试过JSONP吗? - Diodeus - James MacFarlane
可能重复 $ .ajax调用在IE8中工作正常,在Firefox和Chrome浏览器中不起作用 - Chamika Sandamal
@Diodeus我试过JSONP,但它仍然在IE8中产生错误。响应是文本而不是JSON,所以我认为它也不合适。 - peter
@ChamikaSandamal这是重复的吗?你所关联的威胁是一个完全相反的问题 - peter
@PeterCPWong:是的,但原因是跨域策略。所以解决方案是一样的 - Chamika Sandamal


答案:


看到我对这个问题的回答

按照这篇文章了解有关如何使用跨域Ajax请求的更多信息


3
2018-02-16 16:17



不幸的是,我无法改变远程服务器的代码或响应 - peter
如果您无法更改远程服务器的响应,请按照第二步 详细教程。 它清楚地提到了如何在服务器(而不是远程服务器)中设置自己的代理 - Chamika Sandamal
在您自己的服务器上设置代理太慢了。你必须通过自己的服务器,从远程服务器请求,等待响应,然后输出自己的响应。请求需要两倍的时间。 - peter


尝试在之前的某处添加此内容 ajax电话  - 最好 它的位置是在任何其他JavaScript执行之前!

jQuery.support.cors = true;

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

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


7
2018-02-16 16:04



添加该行代码后,我现在收到“拒绝访问”错误 - peter
这让我感到惊讶 - 我遇到了“No Transport”问题并立即用该代码解决了这个问题。我做了一些挖掘并遇到了这个: stackoverflow.com/questions/5087549/...  - 任何帮助?对不起,我的建议不适合你:\ - SpaceBison
我有这个问题,在Chrome中工作但在IE中没有传输错误,SpaceBison的解决方案解决了我的问题。我不得不将呼叫直接放在ajax呼叫之上。我第一次尝试在$(document).ready中添加它但它没有工作,然后我直接在ajax调用前添加它并且它工作。谢谢SpaceBison - Lismore
为什么每个人(我也是)用3天时间用ajax来解决跨域问题,当一个简单的代码行可以在30个secondes中解决这个问题。当谷歌搜索“jQuery enable cross domain”时,为什么这个答案不会出现在第一位。谢谢@SpaceBison! - TCHdvlp


我知道这是一个非常古老的问题,但遗憾的是人们仍在使用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请求不起作用)

0
2018-01-27 16:04