使用setTimeout进行jQuery递归ajax轮询

时间:2014-09-05 21:37:15

标签: javascript jquery ajax ajax-polling

这个问题与此有关:jQuery recursive ajax poll using setTimeout to control the poll interval,但略有不同,我无法弄清楚原因。

function _poll(n) {
  $.ajax({
    url: "/check_status",
    type: "POST",
    data: {state: 0},
    success: function(xhr) {
       var data = $.parseJSON(xhr)
       if (data.status == 0) {
         poll(n)
       }
    }
  });
}

function poll(n) {
  setTimeout(_poll(n), 5000);
}

像其他问题一样,请求也是疯狂发出的。 非常感谢您的帮助!

注意,我必须使用不同的名称“poll”和“_poll”用于其他目的。

1 个答案:

答案 0 :(得分:1)

我相信你的问题就在这一行:

setTimeout(_poll(n), 5000);

您正在调用该函数并传递其返回值,您必须将其作为参数传递。例如。想一想这段代码的执行方式:

setTimeout(Math.Sum(2, 7), 5000);

它将返回9作为第一个变量,而不是函数本身。

解决此问题的最简单方法是使用此格式,它定义了一个匿名函数:

setTimeout(function(){ _poll(n) }, 5000);