如何使用JQuery每秒发送一次Ajax请求?

4
如何使用JQuery每1秒发送一次Ajax请求?

5
很可能你做不到。一个请求花费超过1秒的时间完成很常见。如果你尝试这样做,几乎肯定会出现长队等待可用连接和请求回来的不同顺序(造成竞争状况)。你可能想在前一个请求的回调中发送一个请求。 - Quentin
5个回答

17

正如David已经指出的那样,您可能不希望每秒发送一次请求。

因此,使用setInterval是一个不好的主意。

相反,考虑像这样做:

function doAjax() {

  $.ajax({
   ...
   complete: function() {
    setTimeout(doAjax,1000); //now that the request is complete, do it again in 1 second
   }
   ...
  });
}

doAjax(); // initial call will start rigth away, every subsequent call will happen 1 second after we get a response

6

您可以使用setInterval,但setInterval不是jQuery的一部分:

setInterval(function() {
    $.get(...);
}, 1000);

1

1秒的时间间隔已经足够小,你可能会在收到第一个请求的响应之前开始第二个请求。因此,你应该在接收到上一个请求后再开始下一个请求(参见Martin Jespersen的建议),或者将前一个$.ajax请求的jqXHR保存在变量中,并使用它来中止前一个请求(请参见这里的示例)。


0
setInterval(myAjaxCall, 1000);

在函数 myAjaxCall() 中,显然你将使用 jQuery 执行所有的 AJAX 操作。

0
如果您使用 setInterval 方法,可能会导致浏览器崩溃,因为 setInterval 不会等待 ajax 函数完成,如果服务器运行缓慢或用户连接速度较慢,则可能会导致同时运行多个 ajax 请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接