Jquery 无法成功拒绝链接的AJAX调用?

Jquery 无法成功拒绝链接的AJAX调用?,jquery,ajax,promise,jquery-deferred,Jquery,Ajax,Promise,Jquery Deferred,我有一个简单的JQuery事件处理程序,它在提交表单时被触发 $('.selector').on('submit', function(e) { e.preventDefault(); submitForm(status).then(updateData()); }); 我正在尝试添加取消第二个呼叫的功能,如果第一个呼叫满足特定条件,但我无法让它工作。我发现了这个问题,但由于某种原因,当返回reject()时,第二个函数仍然执行 我是否需要创建一个延迟对象并返回它,还是只需调

我有一个简单的JQuery事件处理程序,它在提交表单时被触发

$('.selector').on('submit', function(e) {
    e.preventDefault();

    submitForm(status).then(updateData());
});
我正在尝试添加取消第二个呼叫的功能,如果第一个呼叫满足特定条件,但我无法让它工作。我发现了这个问题,但由于某种原因,当返回
reject()
时,第二个函数仍然执行

我是否需要创建一个延迟对象并返回它,还是只需调用
then()
?我读了很多关于延迟和承诺的书,但仍然不明白它们是如何工作的

我是否需要创建一个延迟对象并返回它,还是只需调用then()?我读了很多关于延迟和承诺的书,但仍然不明白它们是如何工作的

这是jQuery<3承诺的问题。在jQuery3中,链接问题得到了解决,您可以
抛出
来发出错误信号

您的代码实际上并没有调用
updateData
,在如上所述提交表单之后,您需要向其传递一个函数,并向其传递一个承诺。更好的promise库(如bluebird)或类型检查器(如TypeScript)会告诉您:)


您正在运行哪个版本的jQuery?jQuery3.x的行为与1.x/2.x.Uh有所不同,
submitForm(status)应该是
submitForm(status),然后是(updateData)。你的第一个总是调用
updateData()
,并将返回结果作为
.then()
处理程序传递,甚至在承诺调用
.then()
处理程序之前。它是JQuery 1.12.4。它调用
updateData
,问题是我无法在需要时中断它。我已经按照您的建议更改了它,但现在它根本没有被调用。感谢您的建议,但我决定放弃
then
,只需在成功回调中调用
updateData
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
        }
    });
}
submitForm(status).then(updateData); // pass the function, don't invoke