1,起因:
跨域的問題一般有兩種解決方式比較常用,一是使用jsonp,二是服務端配置cors策略。
2,cors跨域產生的問題
默認的情況下,cors做到跨域之后是沒有供應憑證(cookie、HTTP認證及客戶端SSL證實等)(童鞋們都有牽扯到cookie吧,如果大神的網站一丁點都不占cookie的,此文略過)。重點來了,我們可以使用ajax配置項 withCredentials來解決這個問題,下來分別看看原生xhr和jquery的ajax是怎么做配置的:
//原生的配置 var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.xxx.com/api'); xhr.withCredentials = true;
xhr.async=false; xhr.onload = onLoadHandler; xhr.send();
//jquery ajax配置 $.ajax({ type: "GET", url: 'data/tree.json',
async:false, xhrFields: { withCredentials: true } }).done(function(data) { console.log(data); });
但是!!!!在火狐瀏覽器中你會發現報錯了

也就是說在啟用同步模式的ajax后,在火狐瀏覽器中withCredentials配置是並不起作用的,並且不能正常返回數據,導致我們的請求“失敗!”
解決方案:
jquery配置模式需要修改:
$.ajax({ type: "GET", dataType: "json", url: 'data/tree.json', beforeSend: function(xhr) { xhr.withCredentials = true; } }).done(function(data){ console.log(data); });
將withCredentials配置寫進beforeSend函數,就可以解決了
