【问题标题】:jquery $.post error when called from Bootstrap Modal从引导模式调用 jquery $.post 错误
【发布时间】:2012-03-04 19:08:38
【问题描述】:

在我正在开发的 Web 应用程序中,我使用 Bootstrap 显示了一个模态对话框。在该对话框中,我有表单元素和一个保存按钮。当用户单击保存时,我会触发一个函数,该函数调用 $.post 来调用 asp.net mvc 操作来保存输入的数据。

当我单击“保存”按钮时,浏览器 (Chrome) 会显示以下消息:

“出乎意料的事情发生了:(.....”。

确认错误消息后,将调用 asp.net 操作,脚本的其余部分正常完成。如果我使用 $.ajax,我也会看到同样的错误。

IE 给出的行为略有不同。在 IE 中看到相同的消息,但在成功回调函数完成后出现。

如果我从模式对话框外部调用保存函数,我看不到此错误消息。

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 调用时,会发生以下情况:
我第一次尝试保存未知的 ajax 异常时,会引发模式关闭。
如果我再次显示模态并尝试保存它工作正常。
如果我知道尝试再次显示模式并保存,我会收到“内部服务器错误”。我的 mvc 动作运行良好。

更新 不知道为什么,但删除模态 div 中的表单标签解决了问题。

谢谢,

兰斯

【问题讨论】:

  • 似乎无法获取有关 ajax 错误的信息。 throwedError 参数为空,状态码为 0。我的 asp.net mvc 操作没有抛出任何异常。
  • 从模式中移除
    元素解决了问题.....

标签: jquery modal-dialog twitter-bootstrap


【解决方案1】:

我的模态中有标签。这就是造成问题的原因。不知道为什么。我会在 twitter bootstrap 用户列表上发布问题。

【讨论】:

    【解决方案2】:

    你以错误的方式绑定ajaxError,如果状态不是 404 或 500,那么它总是转到 else 块,显示错误“发生意外的事情”,所以改变它

    $(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 :( ...");
       }
     }
    });
    

    【讨论】:

    • 只有当我没有获得成功状态代码 200 时才会执行该部分代码,因此逻辑是正确的。它正在检查它将处理的两种状态代码类型,如果是其他类型,则只发出警报。
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多