2012-02-13 24 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引导程序用户列表中发布问题。