2012-12-06 21 views
2

我想寫一個插件,這將與我的服務器工作很多。每一次頁面加載都會調用一個AJAX調用我的服務器的數據,服務器應該返回一個簡單的字符串。我應該如何處理很多AJAX調用?

現在我想了解什麼是這種類型的程序最好的辦法。

我應該在每次需要數據時創建一個AJAX調用,或者有一些方法可以創建一個打開的連接(儘管更改了網頁)以節省服務器功耗?

我應該以某種方式聽取某些端口或類似的東西嗎?

我還有其他選擇,或者我該怎麼做才能做到最有效的方式?

+0

Ajax調用的目的是什麼? –

+0

該調用將獲取一個簡短的字符串,這對於服務器來說需要時間來處理。 –

+0

如果您提供更多信息,它將幫助我們給出更好的答案。字符串中有什麼? –

回答

2

您可以使用HTML5的WebSockets (http://www.html5rocks.com/en/tutorials/websockets/basics/) 如果使用這種方法,那麼你需要重新考慮你的方法程序你的web服務器,因爲websockets不遵循AJAX的請求 - 響應範例。相反,他們使用連接來傳輸數據,因此您需要在服務器上打開一個端口並進行監聽,其實現方式取決於您使用的語言或框架。這是快速和響應,但只適用於大多數現代瀏覽器。

另一種方法是使用長輪詢(http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery)。這被一些聊天客戶端使用。它發送一個AJAX請求到服務器,服務器接收它並保持等待,直到數據可用,然後發送響應。然後客戶發出另一個請求,等待並重復。

也許你幾乎不會想要簡單的字符串發送到客戶端。使用XML或JSON編碼響應幾乎總是更好。

+0

我最初的想法是使用JSON,但是因爲wer're正在談論1個完整的字符串,所以我沒有理由爲json添加額外的字符。您提供的解決方案似乎(對我)只對同一頁有效,但我正在更改頁面,所以我不必再次打開套接字?我不明白投票可以幫助我多久,但這是我正在尋找的信息,所以我會+1它 –

+0

如果您使用JSON,而開銷將是一些10-20(沒有什麼可擔心的)額外的字符,這是一個更好的做法,在不破壞現有代碼的情況下向系統添加新功能將會更容易,但您可能永遠不需要它。如果您正在更改頁面,則無法保持任何連接(任何類型)的打開。您可以在頁面中嵌入一個IFRAME,並在您使用基頁來管理所有連接內容時使用它進行導航。 – Xocoatzin

+0

你說服了我有關JSON :)但是,我知道js在運行時保存在內存中,所以你告訴我,當頁面重新加載瀏覽器(Chrome或FF)時,它會從內存中刪除所有數據?可以以某種方式命令它記住然後也許我就可以保持連接打開 –

1

只需創建一個簡單的AJAX調用並將其放在每個頁面上,或者將其保存爲自己的文件,並將每個頁面上的服務器包含在標題中。就那麼簡單!

$(document).load(function(){  

    $.ajax({ 
     type: "POST", 
     url: "/where_your_string_is.php", 
     success: function(msg){ 

      $("#stringHolder").html(msg); 

      } 

    }); 

});  
+0

我正在寫一個插件,並沒有訪問服務器。您的回答正是我到目前爲止,每頁的ajax請求,我正在尋找更好的方法來做到這一點。 –

+1

@ eric.itzhak更好的方法?使用AJAX?嗯...這很簡單。 – VIDesignz

+0

我正在尋找ajax的替代品,如果這是需要的。我只需要在使用JS的網站和我的服務器之間創建一個會話,問題在於頁面發生變化,因此代碼會重新執行。你提供的方式其實很簡單,但它是常規方式。 –

0

的WebSockets API允許雙向通信,但我只是發現有另一種選擇叫HTML SSE如果你只需要拉的數據可能被使用。所以如果你偶然發現了這個問題,那麼也要考慮這個選項。