gpt4 book ai didi

javascript - jQuery .done() .fail()

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:15 24 4
gpt4 key购买 nike

我们想要的是操纵 createSite 函数预期返回 {ac:failed} 所以当它失败时 .fail(failOption) 将被执行,否则 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 promise 的 fail 部分是在我想象的 200 范围之外的 http 状态上触发的,例如 400: bad request500:内部服务器错误

如果您无法从 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+) 中,您还可以抛出错误来触发失败:

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 的文档是 here .

关于javascript - jQuery .done() .fail(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com