如何防止异步请求的重复提交

2025-06-21 08:08:33
推荐回答(1个)
回答1:

不推荐用外部变量锁定或修改按钮状态的方式,因为那样比较难:

要考虑并理解 success, complete, error, timeout 这些事件的区别,并注册正确的事件,一旦失误,功能将不再可用;

不可避免地比普通流程要要多注册一个 complete 事件;

恢复状态的代码很容易和不相干的代码混合在一起;

我推荐用主动查询状态的方式(A、B,jQuery 为例)或工具函数的方式(C、D)来去除重复操作,并提供一些例子作为参考:

A. 独占型提交
只允许同时存在一次提交操作,并且直到本次提交完成才能进行下一次提交。module.submit = function() {
if (this.promise_.state() === 'pending') {
return
}
return this.promise_ = $.post('/api/save')
}