簡體   English   中英

jQuery post回調函數失敗,並且總是被調用完成

[英]Jquery post callback function fail and done always being called

我有一個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!");
})

您確實不應該在預期的注冊失敗(例如“電子郵件已存在”)的情況下發送500的http狀態……這應該由一個表示成功/失敗的參數作為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
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM