2009-12-11 59 views
0

我使用$ .ajax函數與常規的asp.net web服務進行交互。我的問題是如何捕獲錯誤。 Web服務與數據庫進行交互,並在遇到任何錯誤時返回錯誤,但在此之後,我非常不清楚如何捕獲這些錯誤(以及在$ .ajax性能期間遇到的其他錯誤)。jquery Ajax函數和ASP.net web服務錯誤捕獲

$ .ajax具有一個參數msg的回調失敗。我是否必須在Web服務端執行一些操作來使用數據庫中的錯誤填充該msg變量?

有人可以概述我需要在我的代碼中採取的步驟,以便使用Jquery + ASP.net Web服務進行可靠的通信嗎?

謝謝!

var list = [["john.doe", "corp"],["1","2","3","7"],["4","5","6"],["34","88","898"]]; 
     var jsonText = JSON.stringify({ list: list }); 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost/TemplateWebService/TemplateWebService/Service.asmx/SaveSampleTemplate", 
      data: jsonText, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(response) { 

      alert("success!"); 

       alert(response.d); 


      }, 

      failure: function(msg) { 

       alert("fail"); 

       $('#pnlOutput').append('<p><font color="red">Message error ' + msg + ' </font></p>'); 

      } 

     }); 

    } 
+0

回調函數實際上被稱爲「錯誤」而不是「失敗」。 – 2009-12-11 18:54:53

+0

謝謝賈斯汀。這也是我剛纔注意到的。我必須複製我最初的例子錯誤。但是如果說Web服務不可訪問,它確實會顯示一條錯誤消息。 '失敗'是否被棄用? – sarsnake 2009-12-11 18:56:07

+0

嗯,我不確定。我從來沒有在文檔中看到過...... – 2009-12-11 18:57:15

回答

1

我相信,錯誤回調函數被調用時,服務器響應與'200'狀態以外的其他東西。因此,如果服務器上出現異常或網絡問題,則回調將運行。

如果要通過錯誤回調輸出內容,則必須將服務器響應設置爲「200」以外的內容。

根據您要做的事情,您可能需要小心,因爲您正在模糊真正的服務器/網絡錯誤和部分業務邏輯之間的界限。

希望它有幫助!

編輯:查看文檔here在選項選項卡下的更多信息。

+0

謝謝,我看到了那個頁面。 但是,我的問題是更多的與如何有效地向用戶顯示數據庫錯誤。我不會介入服務器響應,所以要做到這一點的方法是讓響應對象返回數據庫錯誤。爲了實現這一點,我將在Web服務中設置返回對象,以返回錯誤而不是結果。這是正確的想法嗎? – sarsnake 2009-12-11 19:24:46

+0

這聽起來像是個正確的想法......但我不確定最好的方式去實現它。您可能會嘗試捕獲服務器上的異常,並向用戶拋出一個新增的(自定義或其他方式)整理消息。 – 2009-12-11 19:38:56

+0

我會抓住Web服務中的錯誤,然後將其包裝並將其推入到一個返回對象中,然後在成功回調(記住這是一個數據庫錯誤,因此不應該調用錯誤回調),我會解壓縮它並將其展示給用戶。 – sarsnake 2009-12-11 20:09:20