重复jQuery ajax调用

ran*_*dev 24 ajax jquery repeat

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

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

我试图用函数包装$ .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);
});
Run Code Online (Sandbox Code Playgroud)

但它说"ajaxd没有定义"

bal*_*dre 49

你的方法不应该放在里面准备好方法,否则会提供有,而不是外界.

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

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

  • "那些等待的人会有好的东西" (10认同)
  • 不要说'谢谢你',只是提出问题 - > http://blog.stackoverflow.com/2011/01/how-to-say-thanks-in-an-answer/ (3认同)
  • 我知道.但是当我试着说"你可以在5分钟内批准答案." (2认同)

Wik*_*arz 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();
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

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

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

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


Cur*_*urt 8

$(document).ready(function() {

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

});
Run Code Online (Sandbox Code Playgroud)