Jquery 后回调函数失败并完成始终被调用



我有一个API控制器,如果它有效,则返回HttpStatusCodeResult 200,如果他们无法注册,则返回500。问题是 .done 和 .fail 无论返回什么状态代码都会被调用。但是,信息是否正确发布。这是我的发布功能。任何可能导致这种情况的想法将不胜感激?

function register() {
    $.post("../api/Register",
                {
                    'Email': $("#rEmail").val(),
                    'Password': $("#rPassword").val()
                })
    .done((function () {
        alert("Thank you for registering!");
    })())
    .fail((function () {
        alert("Email already exists");
    })());
}

编辑:问题是当jquery.unobtrusive应该防止这种情况发生时,它正在重新加载页面。修复或解决方法是将其更改为按钮而不是窗体。

不是

传递匿名函数,而是通过在函数末尾添加()来将其作为 IIFE 调用

function register() {
    $.post("../api/Register", {
        'Email': $("#rEmail").val(),
            'Password': $("#rPassword").val()
    }).done(function () {
        alert("Thank you for registering!");
    }).fail(function () {
        alert("Email already exists");
    });
}

问题是你立即执行传递给donefail的函数。 这导致这些函数立即执行。

所以只需通过更改此函数来传递函数本身

.done((function () {
    alert("Thank you for registering!");
})())

对此

.done(function () {
    alert("Thank you for registering!");
})

您真的不应该在预期的注册失败(例如"电子邮件已存在"条件)时发送 http 状态 500...这应该由一个参数来处理,该参数表示成功/失败,作为 200 响应的一部分。

您可以使用成功或错误回调来处理意外的内部服务器错误(状态 500),如下所示:

$.ajax({
    url : "../api/Register",
    type : "post",
    data : {"Email" : "you@example.com", "Password" : "pw"},
    dataType : "json",
    success : function(response){
        // handle http 200 responses
        if(response.registrationApproved){
            alert("Thank you for registering!");
        }else{
            alert("email exists");
        }
    },
    error : function(){
        // handle 500 or 404 responses
        alert("server call failed");
    },
    complete : function(){
        // if needed..  this will be called on both success and error http responses
    }
});

相关内容

  • 没有找到相关文章

最新更新