[英]jQuery .done() .fail()
我們在這里想要的是操作createSite
函數的預期返回值{ac:failed}
所以當它失敗時.fail(failOption)
將被執行 else sendMail
/ .done(sendMail)
函數將執行並仍然保持來自createSite
函數的數據這是{bar1:"foo1",bar2:"foo2",bar3:"foo3"}
var cSite = createSite(); //expected return if failed is {ac:"failed"} else success expected return will be {bar1:"foo1",bar2:"foo2",bar3:"foo3"}
var cSite = createSite();
cSite.done(sendMail).fail(failOption).always(alwaysOption);
function createSite() {
return $.ajax({
url: 'something.php',
method: 'POST',
data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
}); //ajax
} //createSite
jQuery 的ajax
承諾的fail
部分是在我想象的 200 范圍以外的 http 狀態上觸發的,例如400: bad request
或500: internal server error
。
如果您無法從something.php
傳遞失敗狀態,則有兩種選擇。 對於 jQuery 1 和 2:
function createSite() {
var promise = $.Deferred();
$.ajax({
url: 'something.php',
method: 'POST',
data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
}).then(function(data) {
if(data.ac === 'failed') {
promise.reject(failed)
} else {
promise.resolve(data);
}
})
return promise;
}
在較新版本的 jQuery (3+) 中,您還可以拋出錯誤以觸發fail
:
function createSite() {
return $.ajax({
url: 'something.php',
method: 'POST',
data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
}).then(function(data) {
if(data.ac === 'failed') {
throw data
} else {
return data
}
});
}
請注意,這完全未經測試。 deferred
的文檔在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.