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

时间:2017-07-03 05:08:15

标签: jquery ajax promise jquery-deferred

我有一个简单的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()即可完成?我已经阅读了很多关于延期和承诺的内容,但仍然无法理解它们是如何工作的。

1 个答案:

答案 0 :(得分:0)

  

我是否需要创建一个延迟对象并将其返回,或者只是通过调用then()来完成它?我已经阅读了很多关于延期和承诺的内容,但仍然无法理解它们的工作原理。

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

在提交表单后,您的代码实际上并未调用updateData,您需要将其传递给函数,并且您将传递给它一个承诺。一个更好的承诺库(如蓝鸟)或类型检查器(如TypeScript)会告诉你:)

submitForm(status).then(updateData); // pass the function, don't invoke