直接上源码 $(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 之后,先终止前一次的遍历,然后开始新的遍历。
1
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); }) }) })(); |
2
Enix 2019-03-03 10:07:39 +08:00 via iPhone
加个计数变量就行了
|
3
baicainiao OP @dd0754
不过这个是在浏览器插件里面的,不是直接调用 AJAX,而是通过 chrome.extension.sendRequest 调用 background.js 的 AJAX 请求,这该如何处置? |