IE9(8)跨域(CORS)解决方案
HTML5中 XMLHttpRequest Level 2 的推出。可以通过在返回的HTTP请求头中加入 Access-Control-Allow-Origin 的设置,让浏览器支持对不同域的AJAX请求。这个情况下前端AJAX的代码不用做任何更改,只需要在服务端的返回中设置以下头信息即可:
Access-Control-Allow-Origin: * //*代表任何域。
也可以指定地址 Access-Control-Allow-Methods: POST,GET//支持的方法
对于XHR2,IE浏览器的支持是IE10以上 。但是IE早在IE8时就推出了 XDomainRequest 对象进行跨域操作,一直沿用到IE10才被取代掉。因此在IE8,IE9中应该使用 XDomainRequest (XDR)来实现。 XDR在创建时是通过 new XDomainRequest() 进行创建。其他操作和XHR有细微差别。比如open方法只有method和url两个参数,XDR只支持异步不支持同步操作。
详细信息可以查看:https://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx
当然,强大的jQuery插件库已经为我们封装好了这种跨域方式的插件jquery.xdomainrequest.min.js,
地址为:http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js 将此插件引入到HTML页面中,还是不够的,这样只能发出去options之后的请求(也就是真正的请求),并没有进行是否需要cors的options请求。这样的做法,虽然服务端能返回数据,但数据是假的,或者说根本就没收到request数据,拿登录来说,用户名和密码都填写正确,提交的时候,返回的却是“账户和密码不能为空”,这样看来,服务端根本就没收到request.所以针对IE9(8)还要在每次发送ajax之前进行一次判断,是否支持cors:jQuery.support.cors = true;这样每次发ajax之前都要先进行一次判断,如果是高级浏览器,就不需要cors的兼容问题,否则要借助xdomainrequest的帮助完成请求!
实际操作:
1、页面引入js文件:
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js" type="text/javascript" charset="utf-8"></script>
2、js
jQuery.support.cors = true; $.ajax({ url:"http://api."+ localhostname +"/portal/reports/"+arr, type:"get", ContentType: 'text/plain', headers: { 'Authorization': id + "-" + token }, ... });
好了,就这些,明天回家过年,祝大家新年快乐!