[英]How would i handle errors when using jQuery.ajax()?
使用jQuery的AJAX方法提交表單數據時,處理錯誤的最佳方法是什么? 這是呼叫可能的示例:
$.ajax({
url: "userCreation.ashx",
data: { u:userName, p:password, e:email },
type: "POST",
beforeSend: function(){disableSubmitButton();},
complete: function(){enableSubmitButton();},
error: function(xhr, statusText, errorThrown){
// Work out what the error was and display the appropriate message
},
success: function(data){
displayUserCreatedMessage();
refreshUserList();
}
});
該請求可能由於多種原因而失敗,例如重復的用戶名,重復的電子郵件地址等,並且在發生這種情況時將ashx
寫入以引發異常。
我的問題似乎是,通過引發異常, ashx
導致statusText
和errorThrown
不確定。 我可以轉到XMLHttpRequest.responseText
,其中包含構成標准.net錯誤頁面的HTML。
我在responseText
找到頁面標題,並使用標題來計算拋出了哪個錯誤。 盡管我懷疑啟用自定義錯誤處理頁面時會崩潰。
我應該在ashx
拋出錯誤,還是應該將狀態代碼作為對userCreation.ashx
的調用返回的數據的一部分返回,然后使用它來決定要采取什么措施? 您如何處理這些情況?
確保將Response.StatusCode
設置為200以外的值。使用Response.Write
編寫異常的消息,然后使用...
xhr.responseText
在您的javascript / ajax中,我希望這項工作有效。
如果服務器沒有執行被要求執行的操作,則服務器在消息中返回錯誤代碼更有意義。
例如,嘗試使用現有的用戶名創建新用戶可能會返回以下錯誤:
409沖突:用戶存在
當服務器返回的HTTP代碼不是200到299或304(即未修改)時,則將調用error()
回調。 在這種情況下, textStatus
設置為error
。
可以通過查看status
字段來檢查HTTP錯誤代碼,如下所示:
if(jqxhr.status == 409)
{
// got a conflict (i.e. same username)
...
}
正如您在答案中提到的那樣, jqxhr.responseText
將包含錯誤消息(在上面的示例中為"Conflict: User Exists"
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.