2012-02-13 20 views
2

在我開發的Web應用程序中,我使用Bootstrap顯示模態對話框。在那個對話框中,我有表單元素和一個保存按鈕。當用戶點擊保存時,我會觸發一個調用$ .post的函數來調用一個asp.net mvc動作來保存輸入的數據。

的瀏覽器(Chrome)顯示,當我點擊保存按鈕以下消息:

「意想不到的事情發生:(.....」。

確認錯誤信息後asp.net動作被調用,腳本的其餘部分完成,我也看到了同樣的錯誤,如果我使用$ .ajax。

IE給稍微不同的行爲。成功回調函數co mpletes。

如果我從模態對話框外調用保存功能,我沒有看到這個錯誤信息。

function saveUser() { 
    var userId = $('#userId').val(); 
    var fullName = $('#fullName').val(); 
    var userName = $('#userName').val(); 
    var isAdmin = $('#isAdmin').is(':checked'); 
    var authenticationMode = $('#userAuthenticationMode').val(); 

    $.post(
     "@Url.Action("Save", "Account")", 
     { 
      userId : userId, 
      fullName : fullName, 
      userName : userName, 
      isAdmin : isAdmin, 
      authenticationMode : authenticationMode 
     }, 
     function (data) { 
      if (data.Success) { 
       alert("success"); 
      } 
      else { 
       alert("failed"); 
      } 
     } 
    ); 

這裏是模態的聲明:

<div id="update_user_modal" class="modal hide"> 
     . 
     . 
     .  
    <div style="float:right"> 
     <button id="SaveUser" class="btn btn-primary">Save changes</button> 
    </div> 
</div> 

更新:

找到警報消息的來源。有一個在代碼Ajax錯誤處理程序,其同事沒有提到:

// Set up AJAX error handling ... 
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) { 
if (jqXHR.status == 404) { 
    $("#NotFoundInfoDialog").dialog("open"); 
} else if (jqXHR.status == 500) { 
    $("#InternalServerErrorDialog").dialog("open"); 
} else { 
    alert("Something unexpected happend :(..."); 
    } 
}); 

我如何能調試Ajax錯誤的任何想法。 jqXHR.status返回0

更新 當我使用$就做一個AJAX調用會發生以下情況:
我第一次嘗試保存一個未知的AJAX引發異常和模態關閉。
如果我再次顯示模式並嘗試保存它工作正常。
如果我知道嘗試再次顯示模式並保存,我會收到'內部服務器錯誤'。我的MVC行動工作正常。

更新 不知道爲什麼,但刪除模態div中的表單標籤解決了問題。

感謝,

蘭斯

+0

似乎無法回到關於ajax錯誤的信息。 thrownError參數爲空,狀態碼爲0.我的asp.net mvc動作沒有拋出任何異常。 – Lance 2012-02-13 11:45:23

+0

從模態中刪除

元素解決了問題..... – Lance 2012-02-13 14:52:41

回答

1

你在錯誤的方式結合ajaxError,如果狀態不是404或500,然後它總是去別的塊,顯示錯誤「意想不到的事情happend」,所以改

$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) { 
if (jqXHR.status != 200){ 
if (jqXHR.status == 404) { 
    $("#NotFoundInfoDialog").dialog("open"); 
} else if (jqXHR.status == 500) { 
    $("#InternalServerErrorDialog").dialog("open"); 
} else{ 
    alert("Something unexpected happend :(..."); 
    } 
} 
}); 
+0

只有當我沒有獲得200的成功狀態代碼時,該代碼段才被執行,因此邏輯正確。它正在檢查它將處理的兩種狀態代碼類型,並且如果它是其他任何內容,就會發出警報。 – Lance 2012-02-13 13:51:35

0

我的模態裏面有標籤。這是導致問題的原因。不知道爲什麼。我將在twitter引導程序用戶列表中發佈問題。