我的web服務器不管是什麼返回JSON響應任何Ajax請求。如果響應成功,則返回狀態碼爲200的json。如果出現錯誤,它將返回狀態碼爲400或500的json。我需要獲取該信息,即使請求是400或500,因爲json響應具有錯誤消息,需要將其呈現給用戶。正從一個Ajax請求,jQuery中的錯誤響應
的問題是,jQuery的$就功能不給你訪問響應對象,如果狀態碼不是200,是否正確?有沒有辦法做到這一點?
我的web服務器不管是什麼返回JSON響應任何Ajax請求。如果響應成功,則返回狀態碼爲200的json。如果出現錯誤,它將返回狀態碼爲400或500的json。我需要獲取該信息,即使請求是400或500,因爲json響應具有錯誤消息,需要將其呈現給用戶。正從一個Ajax請求,jQuery中的錯誤響應
的問題是,jQuery的$就功能不給你訪問響應對象,如果狀態碼不是200,是否正確?有沒有辦法做到這一點?
確實如此。該success
函數被調用,只有當調用成功,但是當有許多人錯誤的error
回調被稱爲 - 包括超過200
$.ajax({..., error: function(XMLHttpRequest, textStatus, errorThrown) { ... } });
這是不一樣的,因爲你在這裏沒有像'成功'這樣的JSON對象。 – 2010-10-18 17:45:30
哦。完全正確。我誤解了這個問題。我同意klausbyskov的觀點,即在服務器仍然可以生成有效的JSON響應的情況下返回非200 HTTP狀態代碼的想法有點令人不安。 – VoteyDisciple 2010-10-18 18:04:31
@VoteyDicipline,那麼執行此操作的正確方法是什麼?用戶試圖觸發ajax POST請求,但請求包含無效數據,響應代碼應該不是200,是正確的?在json的某個地方返回200響應「錯誤」似乎更加錯誤,IMO。 – priestc 2010-10-18 18:11:40
其他HTTP狀態,您可以覆蓋內部使用,以確定是否jQuery.httpSuccess
method一個請求成功,例如:
jQuery.httpSuccess = function() { return true; }
這將讓你的success
處理器在400/500範圍甚至執行上的狀態碼。
注意:稍後可能會更改爲jQuery.ajax.httpSuccess
。
+1,有趣的東西.. – 2010-10-18 17:56:12
您可以輕鬆地檢索:
$.ajax({
// your options
success: function(data, xhr) {
alert(xhr.status);
}
});
'success'不會被調用時的狀態代碼以外的任何其他200 – priestc 2010-10-18 18:12:56
嗯,我說不行,其他的狀態被認爲是成功的,請參閱:'// IE錯誤有時返回1223當它應該是204,從而把它當作成功,看到#1450 \t \t \t回xhr.status && location.protocol === 「文件:」 || \t \t \t \t xhr.status> = 200 && xhr.status <300 || \t \t \t \t xhr.status === 304 || xhr.status === 1223;' – 2010-10-18 18:25:18
如果你是一個錯誤消息返回JSON你應該用HTTP狀態200返回它,這意味着HTTP請求是成功的,但業務時發生錯誤。 – 2010-10-18 17:41:43