Jquery post回调函数失败并且始终被调用

时间:2014-01-02 04:36:05

标签: javascript jquery jquery-callback

我有一个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应该阻止这种情况发生时,它正在重新加载页面。修复或解决方法是将其更改为按钮而不是表单。

3 个答案:

答案 0 :(得分:4)

通过在函数末尾添加(),而不是传递匿名函数,而是将其作为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");
    });

}

答案 1 :(得分:3)

问题是你是否正在立即执行传递给donefail的函数。这导致这些功能在那时和那里被执行。

所以只需通过更改此

来传递函数
.done((function () {
    alert("Thank you for registering!");
})())

到这个

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

答案 2 :(得分:0)

你真的不应该在预期的注册失败上发送一个500的http状态,例如“email already exists”条件......这应该由表示成功/失败的参数来处理,作为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
    }
});