jQuery使用setTimeout进行递归ajax轮询

jQuery recursive ajax poll using setTimeout

本文关键字:递归 ajax 轮询 使用 setTimeout jQuery      更新时间:2023-09-26

这个问题与此相关:jQuery递归ajax轮询使用setTimeout来控制轮询间隔,但略有不同,我不知道为什么。

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"answers"_poll"。

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

setTimeout(_poll(n), 5000);

在调用函数并传递其返回值时,必须将其作为参数传入。例如,想想这个代码将如何执行:

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

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

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

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