ajax在ie9瀏覽器請求失敗的兼容問題
在chrome下調(diào)試接口的時候都可以正常訪問皇型,但是在IE9下訪問的時候數(shù)據(jù)都沒有了,查看ajax請求過程砸烦,既然沒數(shù)據(jù)弃鸦,那就是請求失敗了,在error的回調(diào)里打印信息外冀,確實沒進入success回調(diào)里;$.ajax方法一直在執(zhí)行error
針對 拒絕訪問 是由于瀏覽器安全機制導致的寡键,解決方法
為點擊IE瀏覽器的的“工具->Internet 選項->安全->自定義級別”將“其他”選項中的“通過域訪問數(shù)據(jù)源”選中為“啟用”或者“提示”,點擊確定就可以了(但是此法需要用戶自行設(shè)置不太現(xiàn)實)
解決辦法
1.解決ajax時出現(xiàn)No Transport,在使用ajax之前添加: jQuery.support.cors = true
jQuery.support.cors = true;//瀏覽器支持跨域訪問
$.ajax({
url: "http://23y8q85354.qicp.vip/getUserInfo",
type: "GET",
dataType: "json",
async: true,
cache: false,
crossDomain: true,
success: res => {
console.log(1,res)
},
error: err => {
console.log(2,err)
}
})
$.ajax屬性及用法
-
async
默認值: true西轩。默認設(shè)置下员舵,所有請求均為異步請求。如果需要發(fā)送同步請求藕畔,請將此選項設(shè)置為 false马僻。注意,同步請求將鎖住瀏覽器注服,用戶其它操作必須等待請求完成才可以執(zhí)行韭邓。
-
cache
默認值: true,dataType 為 script 和 jsonp 時默認為 false溶弟。設(shè)置為 false 將不緩存此頁面女淑。jQuery 1.2 新功能。
-
IE中的crossDomain=true屬性設(shè)置
再ajax請求過程中設(shè)置了crossDomain=true屬性辜御,再谷歌內(nèi)核中是可以正確解讀為support.cors = true鸭你,發(fā)現(xiàn)其他瀏覽器中都是support.cors = true,唯獨在IE中support.cors = false擒权,這個屬性的判斷來自于support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported )袱巨,其中xhrSupported= new window.XMLHttpRequest(),ie9中XMLHttpRequest沒有withCredentials屬性。
2. 在jquery后引入 jQuery-ajaxTransport-XDomainRequest 插件
<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->
如果以上方法不行再試試nginx配置反向代理
location /api/ {
rewrite ^/api/(.*)$ /$1 break; #所有對后端的請求加一個api前綴方便區(qū)分碳抄,真正訪問的時候移除這個前綴
# API Server
proxy_pass http://132.122.14.6:9800/; #將真正的請求代理到serverB,即真實的服務(wù)器地址愉老,ajax的url為/api/user/1的請求將會訪問http://www.serverB.com/user/1
}