jQuery ajax调用设置超时

时间:2013-09-30 13:09:24

标签: jquery ajax

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

如何在jQuery超时函数中包装它,例如每2秒发送一次ajax请求。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用setInterval

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

        });
    }, 2000
)

尝试这样。