簡體   English   中英

如何使jQuery連續請求相同的HTTP GET請求

[英]How to make jQuery to continously request the same HTTP GET request

我正在實現一個使用$ .getJSON讀取jQuery系統狀態的軟件。

我的想法是我要在瀏覽器中顯示實時數據,並希望盡可能頻繁地更新數據。 該服務器也在本地主機上運行,​​因此從理論上講我應該能夠獲得非常低的延遲(至少<50 ms,甚至少於20 ms)。

但是問題是這樣的:我如何用jQuery實現getJSON,以便HTTP GET請求在較早的請求完成后立即自動重新發送?

在當前的實現中,我定義了一個更新函數:

function updateSimulation() {       
   $.getJSON('/simulation/', function(data) {
      // ..parse data here
   });    
}

並每50毫秒添加一次回調:

document.simulationIntervalId = setInterval( "updateSimulation()", 50 );

問題在於,如果一個請求花費的時間超過50毫秒,則多個請求將異步等待結果,這意味着如果一個請求花費的時間更長,則較舊的數據可能會被較新的數據替換,這是不希望的。

因此,基本上,這意味着可以考慮以下兩種解決方案之一:1)當響應到達時,所有掛起的請求都可能被殺死(不是最佳的),2)僅在上一個請求返回后才發送新請求(也許是最佳的)解)。

但是與往常一樣,所有評論和答案都非常感謝!

為什么不對成功函數($ .getJSON的第二個參數)調用updateSimulation?

上一個請求完成后,它將執行請求。

首先,在使用setInterval()setTimeout() ,請勿將方法作為字符串傳遞,因為這會調用臭名昭著的eval() ,這是不良的編碼實踐。 而是這樣傳遞方法: setInterval(updateSimulation, 50);

為了確保ajax請求在發送另一個請求之前已經完成,請使用setTimeout()僅調用一次updateSimulation()方法,然后在jquery的ajax成功事件上再次調用updateSimulation()

首先解析並使用數據,然后發出延遲的呼叫

處理完當前window.setTimeout()后,請改用window.setTimeout()並重新發出另一個。 這樣就不會有重疊

function updateSimulation() {
   $.getJSON('/simulation/', function(data) {
      // ..parse data here
      window.setTimeout(updateSimulation, 250);
   });
}

根據需要調整時間...

請改用setTimeout,並在先例調用返回時調用它。 返回后將運行50毫秒(順便說一句,50毫秒對於AJAX來說太小了,請考慮500毫秒或1000)

您還可以將時間戳添加到發送的數據,並將其與上一個已知的超時進行比較

function updateSimulation() {               
   $.getJSON('/simulation/', function(data) {
         window.setTimeout(updateSimulation, 500 );

         if (data.sent > last_data_sent){
           // use data
           last_data_sent = data.sent

         }

   });              
}

您還可以將setInterval與所需的時間段(例如50ms)一起使用,並添加一個指示器以了解上一個請求是否已完成。 該指標不一定必須包含在全局數組中。

function updateSimulation() {
   if (!requesting) {
      requesting = true;
      $.getJSON('/simulation/', function(data) {
         requesting = false;
      });
   }
}

var requesting = false;
setInterval ('updateSimulation', 50);

命名空間是您使用的對象。

2)聽起來不錯,但50ms有點快。 我不認為服務器會喜歡它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM