在页面加载时运行ajax,然后每5秒运行一次

时间:2014-11-10 14:54:48

标签: javascript jquery ajax

我仍然觉得很难掌握一些javascript / jquery概念。

我想找到一种在页面加载时加载ajax的方法,然后每隔10秒加载一次。我偶然发现http://www.erichynds.com/blog/a-recursive-settimeout-pattern这是一个好主意,因为它提供了一些错误检测来阻止脚本运行,如果ajax失败,只有问题是在页面加载时,它必须等待5秒才能请求数据,我希望它请求数据每10秒,以及页面加载,所以我不必等待10秒才能看到任何内容。

如何让它在页面加载后加载,每隔10秒就加载一次?

我尝试添加以下内容:

   if(this.success_count&&this.failed == 0)
    {
        jQuery.proxy(this.getData, this)
    }else{
        setTimeout(
           jQuery.proxy(this.getData, this),
           this.interval
        );
    }

对此:

    var poller = {

        failed: 0,
        success_count: 0,

        interval: 10000,

        init: function(){

           if(this.success_count&&this.failed == 0)
            {
                jQuery.proxy(this.getData, this)
            }else{
                setTimeout(
                   jQuery.proxy(this.getData, this),
                   this.interval
                );
            }
         },

       getData: function(){
           var self = this;

           jQuery.ajax({
               url        : "foo.htm",
               success    : jQuery.proxy(self.successHandler, self),
               error    : jQuery.proxy(self.errorHandler, self)
           });
       },

        // => Handle Success
        successHandler : function( response ){

              if( response === "failure" ){
                  this.errorHandler();
              } else {
                ++this.success_count;
                  this.init();
              }
          },

       errorHandler: function(){
           if( ++this.failed < 5 ){
              this.interval += 1000;
              this.init();
           }
       }
    };

poller.init();

然后我也尝试了这个,但是它要求两次数据,每个都可以理解一次。

poller.getData();
poller.init();

2 个答案:

答案 0 :(得分:0)

将它放在文档就绪函数中,使用jquery在页面加载开始时将其触发,然后还有一个setTimeout函数,每隔10秒调用一次ajax调用。请参阅下面的示例。

  $(document).ready(function() {
        ajaxFunctionCall();
        setTimeout( ajaxFunctionCall, 10000 );
   });

答案 1 :(得分:0)

在加载时调用该函数,清除它并在函数

中添加settimeout

&#13;
&#13;
var tr=null;
$(function(){
  
  tr=setTimeout(function(){timerFunction();},100);
  
  });

function timerFunction(){
  
  clearTimeout(tr);
  
  //insert following after success
  tr=setTimeout(function(){timerFunction();},10000);
  
  }
  
  
  
&#13;
&#13;
&#13;