2017-05-04 53 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相應地更新了答案。接受它是正確的將不勝感激。 –