重复jQuery ajax调用

时间:2011-02-28 10:44:16

标签: jquery ajax repeat

如何每10秒重复一次jQuery ajax调用?

$(document).ready(function() {
    $.ajax({    
        type: "GET",    
        url: "newstitle.php",   
        data: "user=success",    
        success: function(msg) {
            $(msg).appendTo("#edix");    
        }  
    });

我试图用函数包装$ .ajax并用setInterval调用函数

$(document).ready(function() {
    function ajaxd() { 
        $.ajax({
            type: "GET",
            url: "newstitle.php",
            data: "user=success",
            success: function(msg) {
                $(msg).appendTo("#edix");
            }
        });
    }
    setInterval("ajaxd()",10000);
});

但它说“ajaxd未定义”

3 个答案:

答案 0 :(得分:49)

您的方法不应放在准备方法内,或者在那里可用,而不是在外面。

$(document).ready(function() {
    setInterval(ajaxd, 10000);
});

function ajaxd() { 
  $.ajax({
   type: "GET",
   url: "newstitles.php",
   data: "user=success",
   success: function(msg){
     $(msg).appendTo("#edix");
   }
 });
}

答案 1 :(得分:10)

更好的方法是使用setTimeout,因此您只需在前一个请求完成后发出请求。

应如何做

想象一下,由于某种原因(服务器故障,网络错误)的请求需要比定义的时间更长的时间。你会有很多同时发出的请求,这些都没有任何好处。如果你决定在未来将时间差从10个时间缩短到1秒怎么办?



$(function() {
  var storiesInterval = 10 * 1000;
  var fetchNews = function() {
    console.log('Sending AJAX request...');
    $.ajax({
      type: "GET",
      url: "newstitles.php",
      data: {
        user: 'success',
        some: ['other', 'data']
      }
    }).done(function(msg) {
      $(msg).appendTo("#edix");
      console.log('success');
    }).fail(function() {
      console.log('error');
    }).always(function() {
      // Schedule the next request after this one completes,
      // even after error
      console.log('Waiting ' + (storiesInterval / 1000) + ' seconds');
      setTimeout(fetchNews, storiesInterval);
    });
  }
  
  // Fetch news immediately, then every 10 seconds AFTER previous request finishes
  fetchNews();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

我知道,6年后。但是,我认为这对其他人来说是值得的。

为什么OP的代码不起作用?

值得注意的是,您的代码主要不起作用,因为您将ajaxd()函数调用作为字符串传递给setInterval。它的不是一个好的做法,部分原因是setInterval期望函数全局定义。您应该使用对函数的引用,就像在我的示例中一样。这样,定义函数的位置以及它是否匿名无关紧要。

答案 2 :(得分:8)

$(document).ready(function() {

setInterval(function() { 
  $.ajax({
   type: "GET",
   url: "newstitle.php",
   data: "user=success",
   success: function(msg){
     $(msg).appendTo("#edix");
   }
 });
}, 10000);

});