JS 关于外部终止遍历,然后开始新遍历

2019-03-03 09:24:39 +08:00
 baicainiao

直接上源码 $(document).on("click",".Ajax", function() { $("#list .Title").each(function() { var id = $(this).data("id"); $.ajax({ type: "get", dataType: "json", url: "http://xx.com/xx.php?id="+id, success: function(data) { } }) }) }) 在面页上点击 Ajax 的时候,就会遍历列表去请求 ajax,因为 ajax 反应有点慢无论是同步还是异步还是需要点时间(根据 ajax 返回的内容去修改列表内容)。那么问题来了,当点击 Ajax 进行遍历列表之后,再次点击 Ajax 那么前一次没有执行完的遍历会继续执行,而新的遍历也会在执行,就会造成混乱。不能去隐藏 Ajax 这个按钮,因为是允许这样的操作的,现在主要想要解决,当点击 Ajax 之后,先终止前一次的遍历,然后开始新的遍历。

2358 次点击
所在节点    JavaScript
3 条回复
dd0754
2019-03-03 09:55:52 +08:00
用 abort()啊

(() => {
let a = [];
$(document).on("click", ".Ajax", function () {
for (let o of a) {
o.abort();
}
a = [];
$("#list .Title").each(function () {
var id = $(this).data("id");
var ajax = $.ajax({
type: "get",
dataType: "json",
url: "http://xx.com/xx.php?id="+id,
success: function (data) {
console.log(data);
}
});
a.push(ajax);
})
})
})();
Enix
2019-03-03 10:07:39 +08:00
加个计数变量就行了
baicainiao
2019-03-03 22:12:21 +08:00
@dd0754
不过这个是在浏览器插件里面的,不是直接调用 AJAX,而是通过 chrome.extension.sendRequest 调用 background.js 的 AJAX 请求,这该如何处置?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX