跨域(Cross-Domain) AJAX for IE8 and IE9
程序员文章站
2022-03-12 10:58:18
1、有过这样一段代码,是ajax 2、在谷歌、IE11等浏览器测试没有问题,但是碰巧客户现场是IE8,9这种浏览器,内网系统没办法升级。出现跨域ajax请求插件直接error的情况 3、解决方案在github上找到了解决办法,https://github.com/MoonScript/jQuery- ......
1、有过这样一段代码,是ajax
$.ajax({ url: "http://127.0.0.1:9001", type: "post", data: json.stringify({"reqmsg":"12345"}), datatype: 'json', timeout: 1000 * 30, success: function (response) { if(response.n=='6'){ dosomething(); init(); }else if(response.n=='3'){ init(); } }, error: function(xhr, type){ init(); } });
2、在谷歌、ie11等浏览器测试没有问题,但是碰巧客户现场是ie8,9这种浏览器,内网系统没办法升级。出现跨域ajax请求插件直接error的情况
3、解决方案在github上找到了解决办法,https://github.com/moonscript/jquery-ajaxtransport-xdomainrequest 这个路径下表述了如何解决cross-domain ajax for ie8 and ie9此类问题。
4、首先需要再页面引入
<script type="text/javascript" src="<%=basepath%>resources/js/jquery.min-1.9.1.js"></script> <script type="text/javascript" src="<%=basepath%>resources/js/jquery.xdomainrequest.min.js"></script>
5、然后再正常写ajax之前,加上一句jquery.support.cors = true;
jquery.support.cors = true; $.ajax({ url: "http://127.0.0.1:9001", type: "post", data: json.stringify({"reqmsg":"12345"}), datatype: 'json', timeout: 1000 * 30, success: function (response) { if(response.n=='6'){ dosomething(); init(); }else if(response.n=='3'){ init(); } }, error: function(xhr, type){ init(); } });
6、这样就解决了。最后附上 源码
/*! * jquery-ajaxtransport-xdomainrequest - v1.0.3 - 2014-06-06 * https://github.com/moonscript/jquery-ajaxtransport-xdomainrequest * copyright (c) 2014 jason moon (@jsonmoon) * licensed mit (/blob/master/license.txt) */ (function(a){if(typeof define==='function'&&define.amd){define(['jquery'],a)}else if(typeof exports==='object'){module.exports=a(require('jquery'))}else{a(jquery)}}(function($){if($.support.cors||!$.ajaxtransport||!window.xdomainrequest){return}var n=/^https?:\/\//i;var o=/^get|post$/i;var p=new regexp('^'+location.protocol,'i');$.ajaxtransport('* text html xml json',function(j,k,l){if(!j.crossdomain||!j.async||!o.test(j.type)||!n.test(j.url)||!p.test(j.url)){return}var m=null;return{send:function(f,g){var h='';var i=(k.datatype||'').tolowercase();m=new xdomainrequest();if(/^\d+$/.test(k.timeout)){m.timeout=k.timeout}m.ontimeout=function(){g(500,'timeout')};m.onload=function(){var a='content-length: '+m.responsetext.length+'\r\ncontent-type: '+m.contenttype;var b={code:200,message:'success'};var c={text:m.responsetext};try{if(i==='html'||/text\/html/i.test(m.contenttype)){c.html=m.responsetext}else if(i==='json'||(i!=='text'&&/\/json/i.test(m.contenttype))){try{c.json=$.parsejson(m.responsetext)}catch(e){b.code=500;b.message='parseerror'}}else if(i==='xml'||(i!=='text'&&/\/xml/i.test(m.contenttype))){var d=new activexobject('microsoft.xmldom');d.async=false;try{d.loadxml(m.responsetext)}catch(e){d=undefined}if(!d||!d.documentelement||d.getelementsbytagname('parsererror').length){b.code=500;b.message='parseerror';throw'invalid xml: '+m.responsetext;}c.xml=d}}catch(parsemessage){throw parsemessage;}finally{g(b.code,b.message,c,a)}};m.onprogress=function(){};m.onerror=function(){g(500,'error',{text:m.responsetext})};if(k.data){h=($.type(k.data)==='string')?k.data:$.param(k.data)}m.open(j.type,j.url);m.send(h)},abort:function(){if(m){m.abort()}}}})}));
推荐阅读
-
HTML5中使用postMessage实现Ajax跨域请求的方法
-
关于C#中ajax跨域访问问题
-
HTML5中使用postMessage实现Ajax跨域请求的方法
-
Python的Django应用程序解决AJAX跨域访问问题的方法
-
JQuery Ajax跨域调用和非跨域调用问题实例分析
-
ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
-
jquery跨域请求示例分享(jquery发送ajax请求)
-
Springboot解决ajax+自定义headers的跨域请求问题
-
ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
-
IE9版本以下ajax 跨域问题可行解决方法