如何设置 Ajax 同步发送请求的间隔时间?

2016-07-04 19:31:43 +08:00
 isbase
  var xhr = new XMLHttpRequest();
  for (var i = 0; i < 10; i++) {
      (function(x) {
          setInterval(function() {
              var newCode = code.replace(/replace/, newArr[x]);
              xhr.open('post', '/register.php?', false)
              xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
              xhr.send('reginvcode=' + newCode + '&action=reginvcodeck');
          }, 3000)
      }(i))
  }
  

想把一个数组的全部数据通过ajax发送出去

设置 setInterval 的本意是每隔 3 秒发送一次请求,实际上是完全没有间隔时间,一个请求执行完毕另一个请求马上又开始了。

正确的方法应该怎么做呢?

3192 次点击
所在节点    问与答
15 条回复
binux
2016-07-04 20:05:29 +08:00
「每隔 3 秒发送一次请求」是什么意思?
你这么写不就是毎 3 秒发送 10 个请求吗?
那就是每个 i 间隔 30 秒?
FrankFang128
2016-07-04 20:22:53 +08:00
不要发送同步请求
不要发送同步请求
不要发送同步请求
FrankFang128
2016-07-04 20:24:12 +08:00
而且代码明显有问题,用了循环就不应该用 Interval 吧,用 timeout
FrankFang128
2016-07-04 20:24:41 +08:00
无力吐槽,楼主在用同步的思想写 JS ,当然写不好。
isbase
2016-07-04 20:42:21 +08:00
@binux 就是目标网站只要三秒之内发送两个请求就会出错,所以想间隔 3 秒发送一个请求
isbase
2016-07-04 20:49:17 +08:00
@FrankFang128 这方面确实没什么经验😥😥
hcwhan
2016-07-04 20:49:28 +08:00
你的 for 没有被阻塞 一下都执行了
ck65
2016-07-04 20:57:07 +08:00
你的 for 在一瞬间开了十个几乎同时开始的 setTimeout 。
hcwhan
2016-07-04 21:03:06 +08:00
简单点这样写
var i=0;
function ajaxPost() {
// post 操作
...
i++;
if (i<10){
setTimeout(ajaPost, 3000)
}
}
ajaxPost():
hcwhan
2016-07-04 21:05:07 +08:00
写 js 要注意没有阻塞 用回调
hcwhan
2016-07-04 21:08:28 +08:00
如果是依据上一个 Post 结果处理 可以看下 promise
isbase
2016-07-04 21:47:35 +08:00
@hcwhan Thanks
isbase
2016-07-04 21:48:38 +08:00
@ck65 瞬间点醒 😓
isbase
2016-07-04 21:49:41 +08:00
@hcwhan 这个写法完美解决问题
shiye515
2016-07-04 23:37:44 +08:00
把代码中的 3000 替换成 3000*(x+1)

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

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

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

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

© 2021 V2EX