[英]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應該防止此情況發生時,它正在重新加載頁面。 該修復程序或解決方法將其更改為按鈕而不是表單。
問題是您要立即執行傳遞給done
和fail
。 這導致這些功能在那時和那里立即執行。
所以只需通過更改此函數本身來傳遞
.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.