簡體   English   中英

使用jQuery.ajax()時如何處理錯誤?

[英]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導致statusTexterrorThrown不確定。 我可以轉到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM