IE8发送ajax问题
- 如果$.ajax中没有设置错误抛出,会发现在ie8的ajax请求一点反应没有,network看不到请求,那是因为ie8会默认拦截跨域的请求
$.ajax({
url,
method: "get",
error: function (err) { // 抛出错误
console.log(err);
},
});
- ie8会抛出
error: 拒绝访问
的错误,网上搜到的解决方法可能没有解释全或者不同环境导致,都无法解决- 方法1:给IE浏览器设置一下安全策略,internet选项—》安全----》自定义级别—》其他—》通过域访问数据源,但我设置没有效果,重启电脑都不行
- 方法2:Ajax请求之前设置
jQuery.support.cors = true
,也不行,$.support.cors = true
是一样的。 - 方法3:修改ajax的xhr方法,ie8会报错误
Automation 服务器不能创建对象
,修改的IE的安全策略全部提示或者允许都不行
jQuery.ajaxSetup({ xhr: function () { if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } else { return new XMLHttpRequest(); } } });
- 还有各种方法,忘记了。。
解决方法
- IE8、9不支持跨域的ajax请求,跨域对象只能用XDomainRequest对象,而jQuery并不兼容XDomainRequest,这时候就需要增加jQuery插件
jquery.xdomainrequest.min.js
,网上可以搜索下载,或在文末复制(传送门) - 需要把该文件的引入放在jquery引入的下面,然后在所有ajax请求之前加上(加一次就可以了。)
$.support.cors = true;
$.ajaxSetup({
cache: false,
})
- ajax请求需要加上
dataType: "json"
,具体原因不知道为啥,加上就可以了。。
如果是easyui的datagrid的请求封装则不需要加这个,可能已经封装在里面了。。
- 如果上面还不行,试下放到tomcat里面打开,不要在本地运行,或者修改IE的安全策略
还不行就爱莫能助了,继续搜解决方法去吧。。
jquery.xdomainrequest.min.js
/*!
* jQuery-ajaxTransport-XDomainRequest - v1.0.4 - 2015-03-05
* https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
* Copyright (c) 2015 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()}}}});return $}));