【发布时间】:2017-12-06 06:50:19
【问题描述】:
我有一个简单的 JQuery 事件处理程序,它在提交表单时触发。
$('.selector').on('submit', function(e) {
e.preventDefault();
submitForm(status).then(updateData());
});
如果第一个呼叫满足特定条件,我正在尝试添加取消第二个呼叫的功能,但我无法使其正常工作。我发现了这个问题,但由于某种原因,当返回 reject() 时,第二个函数仍然执行。 Rejecting A jQuery Promise In A $.ajax Success Method.
function submitForm(status) {
return $.ajax({
method: "POST",
url: "/url/to/use",
data: formData,
dataType: "json",
contentType: false,
processData: false
}).then(function(data) {
if (data.error === true) {
return new $.Deferred().reject().promise();
} else {
// do other stuff
}
});
}
我是否需要创建一个延迟对象并将其返回,还是仅通过调用then() 来完成?我已经阅读了很多关于 deferred 和 promises 的内容,但仍然无法理解它们是如何工作的。
【问题讨论】:
-
你运行的是什么版本的jQuery? jQuery 3.x 的行为与 1.x/2.x 略有不同。
-
呃,
submitForm(status).then(updateData());应该是submitForm(status).then(updateData);。你的第一个总是调用updateData()并将返回结果作为.then()处理程序传递,甚至在promise 调用.then()处理程序之前。 -
它是 JQuery 1.12.4。
标签: jquery ajax promise jquery-deferred