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 秒发送一次请求,实际上是完全没有间隔时间,一个请求执行完毕另一个请求马上又开始了。
正确的方法应该怎么做呢?
1
binux 2016-07-04 20:05:29 +08:00
「每隔 3 秒发送一次请求」是什么意思?
你这么写不就是毎 3 秒发送 10 个请求吗? 那就是每个 i 间隔 30 秒? |
2
FrankFang128 2016-07-04 20:22:53 +08:00
不要发送同步请求
不要发送同步请求 不要发送同步请求 |
3
FrankFang128 2016-07-04 20:24:12 +08:00
而且代码明显有问题,用了循环就不应该用 Interval 吧,用 timeout
|
4
FrankFang128 2016-07-04 20:24:41 +08:00
无力吐槽,楼主在用同步的思想写 JS ,当然写不好。
|
6
isbase OP @FrankFang128 这方面确实没什么经验😥😥
|
7
hcwhan 2016-07-04 20:49:28 +08:00 via Android 1
你的 for 没有被阻塞 一下都执行了
|
8
ck65 2016-07-04 20:57:07 +08:00 via iPhone 1
你的 for 在一瞬间开了十个几乎同时开始的 setTimeout 。
|
9
hcwhan 2016-07-04 21:03:06 +08:00 via Android 1
简单点这样写
var i=0; function ajaxPost() { // post 操作 ... i++; if (i<10){ setTimeout(ajaPost, 3000) } } ajaxPost(): |
10
hcwhan 2016-07-04 21:05:07 +08:00 via Android 1
写 js 要注意没有阻塞 用回调
|
11
hcwhan 2016-07-04 21:08:28 +08:00 via Android
如果是依据上一个 Post 结果处理 可以看下 promise
|
15
shiye515 2016-07-04 23:37:44 +08:00 1
把代码中的 3000 替换成 3000*(x+1)
|