2017-05-04 55 views
-2

在我的javascript我定义了一个轮询器,以便每秒刷新一些内容。其定义如下:JavaScript轮询不立即启动

var poller = { 
    // number of failed requests 
    failed: 0, 

    // starting interval - 1 seconds 
    interval: 1000, 

    // kicks off the setTimeout 
    init: function() { 
     setTimeout(
      $.proxy(this.getData, this), // ensures 'this' is the poller obj inside getData, not the window object 
      this.interval 
     ); 
    }, 

    // get AJAX data + respond to it 
    getData: function() { 
     var self = this; 

     $.ajax({ 
      url: "api/view", 
      success: function(response) { 

        // ....do something.... 

        // recurse on success 
        self.init(); 
       } 
      }, 

      error: $.proxy(self.errorHandler, self) 
     }); 
    }, 

    // handle errors 
    errorHandler: function() { 
     if (++this.failed < 10) { 

      this.interval += 1000; 

      // recurse 
      this.init(); 
     } 
     } 
    }; 

    poller.init(); 
}); 

问题是,它不会在加载页面时立即启动。有谁知道原因?提前谢谢了!

+1

*问题是当页面加载时不会立即启动* - 当**启动时**会启动? –

+0

工作得很好:https://jsfiddle.net/q4rvzv0o/(如果我删除尾部'});')。自然,'getData'第一次在'init'运行后是1000ms,因为这就是你所要做的。 –

+0

你需要澄清一下“当页面加载时它不会立即启动”。手段。你期望发生什么,实际发生了什么,它们有什么不同,等等。 – pvg

回答

1

由于第一个$.ajax呼叫的响应时间而发生这种情况。在拨打localhost(开发环境)中的服务时,通话时间可能会超过40秒。

此外,请查看是否有任何其他元素(例如您在特定页面中使用的Highcharts)导致加载页面时出现延迟。

您可以在网络下的浏览器开发人员控制台中检查此行为。这里是(我使用谷歌浏览器)的我$.ajax调用一个响应时间的一个例子:

enter image description here

我还怀疑,当您移动这对生产,你的反应时间会大大降低,但您必须考虑到您的服务器上1000毫秒可能过于积极。

+0

问题不在于轮询器,而在于函数中做了什么。该函数定义了HighChart图表,当我有很多点时,此操作非常缓慢。一旦我做得更快,一切都按预期工作。 –

+0

@ctt_it相应地更新了答案。接受它是正确的将不胜感激。 –