Jquery 无法成功拒绝链接的AJAX调用?
我有一个简单的JQuery事件处理程序,它在提交表单时被触发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()时,第二个函数仍然执行 我是否需要创建一个延迟对象并返回它,还是只需调
$('.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