2012-06-13 35 views
2

我對Ajax和ASP.NET MVC很新穎。我有一個函數,返回到AJAX,我需要處理錯誤情況。當一切正常,然後代碼是好的。我的問題是如何處理錯誤部分。這裏是我有:ASP.NET c中的AJAX錯誤#

返回成功,我有:

var data = new { success = false }; 

return Json(data, JsonRequestBehavior.AllowGet); 

,我需要知道什麼返回時出現異常或錯誤?

這是我的查詢:

function DoMailPDF() { 
      $("#submitMail").attr("disabled", true); 
      var personid = $("#personid").val(); 
      var unitid = $("#unitid").val(); 
      var url = "@(Url.Action("SendEmail", "Report"))"; 
      $.ajax({ 
       url: url, 
       data: { person: personid , unit:unitid}, 
       success: function() {      
       // $('input[name=MailSent]').attr('checked', true); 
       $("#submitMail").removeAttr("disabled"); 
        alert("Email sent!"); 
       }, 
       error: function() {      
       alert("Email not sent!"); 
       } 
      }); 
     } 

它從未涉及到的誤差函數。我如何使它出現錯誤?任何提示和建議是最受歡迎的。

+0

我忘了提,如果成功,是真的還是假的也沒關係。它具有相同的成功功能。 – Tulips

+0

當RESPONSE的狀態碼不是200時,將調用錯誤方法。檢查瀏覽器上的網絡選項卡 – frictionlesspulley

+0

您可能不明白AJAX調用的成功/錯誤的含義。 「成功」是服務器返回HTTP狀態碼200時的情況。當服務器返回200以外的響應時發生「錯誤」。如果狀態爲200,即使設置了,您的.NET代碼也會始終觸發成功事件你的變量爲「false」。您需要添加代碼到您的「成功」事件來檢查響應:成功:功能(響應){如果(response.success){alert('成功');} else {alert('not success');}} –

回答

2

正如Nick Bork在評論中已經解釋的那樣,響應的錯誤/成功狀態由頭中發送的Http狀態代碼決定。您仍然可以採用建議的方式並檢查響應對象和成功屬性,但當您已經擁有更強大和久經考驗的機制(HTTP協議本身)時,顯然不是正確的方法。根據代碼時一切順利

.NET將使用HTTP 200(OK),但你可以通過訪問效應初探對象這樣的改變在控制器這種行爲,例如:

Response.StatusCode = 500; // or any of the other HTTP "failure" status codes 

任何狀態碼在4xx或5xx類別中將觸發在$.ajax(...)調用中指定的error()處理程序。從那裏你當然也可以檢查正確的狀態碼,響應細節和XHR對象的每個屬性,以提供更有意義的用戶體驗。

HTTP狀態代碼在石頭幾乎集合,也是不可能改變的,這就是爲什麼他們是在我看來絕對preferrable到定製的解決方案......

PS:對於HTTP狀態代碼的列表,wikipedia是你的朋友。

5

您可以通過書面形式訪問您的JSON響應對象:

 $.ajax({ 
      url: url, 
      data: { person: personid , unit:unitid}, 
      dataType: 'json', 
      success: function (response) {      
       if (response.success == false) { 
        // Error handling 
       } else { 
        // Success handling 
       } 
      }, 
      error: function() {      
      alert("Email not sent!"); 
      } 
     });