-1
 $.ajax({
    url: "data.php"
}).done(function(data) { 
    //code
});

如何将其包装在 jQuery 超时函数中,例如每 2 秒发送一个 ajax 请求?

4

3 回答 3

4

如果将其包装在 中setInterval,则可能会冒着向服务器发送大量请求的风险,并且有可能无法将它们全部恢复原状。timeout在回调里面放一个:

function runAjax() {
    $.ajax({
        url: "data.php"
    }).done(function(data) { 
        //code
        setTimeout(runAjax, 2000); //Run it again in 2 sec
    });
}

runAjax(); //I suppose we should start the AJAX :D
于 2013-09-30T13:11:11.383 回答
1

我会做这样的事情:

var ajax = null;
function callAjax()
{
  if(ajax != null)
     ajax.abort();
  ajax = $.ajax({
    url: "data.php"
  }).done(function(data) { 
    //code
  });
  setTimeout(callAjax, 1000); // Every 1 second
}
callAjax();

此代码将每 1 秒执行一次 Ajax 调用。如果另一个请求正在运行,它将在运行另一个请求之前将其终止。

更好的方法是使用长轮询: http ://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

于 2013-09-30T13:12:05.283 回答
0

你可以使用setInterval

var xhr;
setInterval(
   function runAjax() {
        if(xhr) {
            xhr.abort();
        }
        xhr = $.ajax({
            url: "data.php"
        }).done(function(data) { 

        });
    }, 2000
)

试试这样。

于 2013-09-30T13:12:34.220 回答