2015-12-10 71 views
1

我正在使用xhr.setRequestHeader在jQuery中設置beforeSend的身份驗證。該代碼是這樣的:如何閱讀setRequestHeader錯誤?

beforeSend: function (xhr) { 
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(app.username + ':' + app.password)); 
} 

沒有看中這裏,但是我們要說提供的密碼不正確,那麼我的身份驗證失敗...如何捕獲錯誤正是由於這個部分?

似乎沒有beforeSendxhr.setRequestHeader的回調函數,任何人都有解決方案或寫了一些東西來做到這一點?

編輯:

這是代碼

success: function(rows) { 
    // everything is fine here when I provide correct username/password 
}, 
error: function(responseData, textStatus, errorThrown) { 
    console.warn(responseData); 
    console.warn(textStatus); 
    console.warn(errorThrown); 
    // nothing shows up in the console when I provide a bad username/password 
} 

編輯2的其餘部分:

那麼,事情是XHR從來沒有因爲沒有控制服務器失敗-側!驗證成功與否,通話已完成,並返回了4的readyState和200的status。如果沒有顯示錯誤,則說明爲什麼我無法顯示它!

+1

_如何捕捉那個部分的錯誤?_與AJAX請求期間處理任何錯誤的方式相同:'error'回調選項。或jqXHR對象的'失敗'方法。沒什麼特別的。 – hindmost

+0

jQuery有一個錯誤回調,您可以將其掛接到http://api.jquery.com/jquery.ajax/ – garryp

+0

您可以使用'error'回調函數或'.fail()'promise函數來執行此操作。檢查[文檔](http://api.jquery.com/jquery.ajax/) – pistou

回答

2

首先,xhr.setRequestHeader()只是爲請求添加一些標頭。它實際上並沒有發送它,所以密碼將不會被驗證,直到請求被其他XHR代碼實際發送。所以,在您設置標題時,不會出現失敗。

如果密碼錯誤,那麼XHR響應/狀態就是將錯誤傳回給您的地方。 XHR調用將失敗,並且(取決於服務器端實現),您將獲得指示錯誤的狀態代碼或指示錯誤的特定響應。

您可以使用onreadystatechange事件處理程序查看響應。

如果您需要進一步的幫助,請添加其餘代碼發送和處理您的問題的這個Ajax調用,所以我們可以建議更具體。

+0

我做了一個更容易理解的編輯,謝謝。 –

+0

@PierreLeBot - 在您發出其中一個請求時,在Chrome調試器中打開網絡標記,然後仔細檢查您通過網絡得到的響應。這將建議在哪裏尋找錯誤或爲什麼你沒有看到它。另外,如果您使用基本身份驗證,jQuery提供了用於傳遞用戶名和密碼的內置選項。有關詳細信息,請參見['.ajax()'doc](http://api.jquery.com/jquery.ajax/)。 – jfriend00