ajax withCredentials在firefox下問題的解釋


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函數,就可以解決了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM