在xmlHttpRequest提交中暂停10秒



这段javascript代码相当长,但最重要的部分是它发布的结尾:

 httpwp['send'](paramswp);

我试过在每次发送之间设置10秒的暂停,但没有成功。通常情况下,它会立即发送它们。

完整代码http://pastebin.com/cEM7zksn

要在调用此函数之前延迟10秒,您可以使用setTimeout

setTimeout(function() { httpwp['send'](paramswp); }, 10000);

或者更简单:

setTimeout(function() { httpwp.send(paramswp); }, 10000);

setTimeout()函数不会在指定的时间内暂停执行,它会在指定的时间后将要执行的函数排队。 setTimeout()后的行代码将立即执行。所以如果你有下面的代码:

1 someFunction();
2 setTimeout(function(){console.log("From timeout");}, 10000);
3 console.log("After setTimeout()");

将发生的是在第1行someFunction()将被调用,然后在第2行一个匿名函数将在10秒时间内排队执行,然后第3行将执行,记录"setTimeout()之后",最后10秒后匿名函数将执行记录"From timeout"。

如果你想编写一个每次迭代间隔10秒的循环,而不是使用传统的for循环,你可以编写一个使用setTimeout()调用自己的函数:

// this for loop won't work
for(var i = 0; i < 20; i++) {
   // do something
   // pause for 10 seconds ---- can't be done
}
// so instead you do something like this:
function timeoutLoop(i, max) {
   if (i < max) {
      // do something
      i++;
      setTimeout(function(){timeoutLoop(i, max);}, 10000);
   }
}
timeoutLoop(0, 20);

我发现你的代码有点难读,所以我没有试图整合上面的,但这里是一个非常简单的演示上面的工作:http://jsfiddle.net/CrSEt/1/

或者这里有一个更简洁的版本,通过使用回调将实际处理与循环函数分开:http://jsfiddle.net/CrSEt/

我敢肯定,如果你稍微摆弄一下上面的代码,你就会看到如何让它在你的代码中工作。您可能需要考虑在ajax成功回调中设置后续超时。

最新更新