2013-09-29 56 views
0

我想創建一個顯示公共API數據的Web應用程序。我將使用d3(一個JavaScript數據可視化庫)。我想每10分鐘從api中檢索數據,並更新我的頁面(比如說是流量,或者其他什麼)。我還沒有構建過很多Web應用程序,我如何獲取更新?如何使用每n分鐘的數據更新Web應用程序

客戶端的js是否應該使用計時器從我的應用程序的服務器端請求更新(可能應用程序是使用Rails或node.js編寫的)。然後服務器進行api調用並異步發送響應?這是否被稱爲套接字?我讀過HTML5提供的套接字。

或者,也許是一個AJAX請求?

或者,我的應用程序的服務器端是否創建一個計時器,進行api調用,然後將更新推送到視圖。這對我來說似乎是錯誤的,在這個應用程序中可能有其他視圖,並且服務器不應該跟蹤哪個視圖處於活動狀態。

這種類型的Web應用程序是否存在標準模式?任何示例或教程非常感謝。

+0

通常一個'XMLHttpRequest'應該是最好的選擇,除非你有特定的需求。 –

回答

1

AJAX請求(XMLHttpRequest)可能是要走的路。

我有一個XMLHttpRequest(使用Java作爲後臺)的一個很簡單的例子在這裏:https://stackoverflow.com/a/18028943/1468130

你可以重新建立一個後端接收任何其他服務器端語言HTTP GET請求。只要回顯你檢索到的任何數據,並且xmlhttp.onload()就會捕獲它。

根據您的數據的複雜程度,您可能希望爲您選擇的服務器端語言找到一個JSON庫,然後將數據序列化爲JSON,然後將其回送給JS。然後,您可以使用JavaScript的JSON.parse()方法將您的服務器數據轉換爲客戶端腳本可以輕鬆使用的對象。

如果您使用的是jQuery,它可以非常順利地處理AJAX,並且使用$.ajax()可能比簡單的XMLHttpRequest更容易。

http://api.jquery.com/jQuery.ajax/ (有整個頁面,大多濃縮在底部。例子)

這真的讓我很煩,怎麼這麼複雜,許多AJAX教程是。至少在jQuery中,這很容易。

基本上,你只需要問一個腳本的東西(發起請求,發送URL參數),並等待腳本來給你的東西回來(觸發onload()jqxhr.done()功能,具有data參數提供這些功能)。


對於您的其他問題:

  • 使用JavaScript的setTimeout()setInterval()發起AJAX請求每個600000毫秒。在請求的onload回調中,處理您的數據並適當地更新頁面。
  • 響應將是異步的。
  • 這不是一個插座。
  • 「推」可能不是在這種情況下去的路。在服務器

    1)更新數據:

0

如果我理解正確的話,這API是外部的,那麼你的問題可以分成兩個獨立的子問題。服務器應該每N分鐘下載一次數據。所以,它不應該連接到客戶的AJAX呼叫。如果兩個客戶同時來到網站,您的服務器將進行兩個API調用,這是不正確的。

實際上,您應該在服務器上創建一個CRON作業,它將調用API並將其結果存儲在服務器上。在這種情況下,您的服務器一次只能撥打一個電話,並且有相當多的新信息被緩存。

2)在客戶端更新數據。如果客戶瀏覽器中的數據應該刷新而不刷新頁面,那麼您應該使用某種Ajax。它可以每X分鐘向您的服務器發出一次請求,以獲取新數據或使用所謂的長輪詢。

0

我認爲實現實時Web應用程序的最有效方法是使用Web套接字來從服務器推送更改,而不是從客戶端進行輪詢。這樣,一旦服務器通知有新的數據可用,用戶可以立即看到更改。你可以閱讀更多關於the similar post

我已經嘗試使用名爲socket.io的nodejs包來製作實時虛擬教室。它對我來說工作得很好。

相關問題