2013-12-13 43 views
0

我正在使用Node JS和Express。使用節點JS與客戶端共享變量

目前,在服務器端,我將某個變量(源)傳遞給我的EJS模板,並使用它的一部分填充頁面上的列表。

當用戶點擊該列表中的一個項目時,我需要掌握該變量的另一部分。

我知道我可以再次爲AJAX服務器的變量(來源),並解決我的問題。但是這似乎沒有必要,因爲當模板生成HTML時,我已經有了變量。

通常的做法是什麼?人們使用AJAX並獲取變量,或者當服務器構建它時,是否有一些很好的方法可以將它存儲在頁面中?

A「黑客」是創建一個隱藏的元素,並存儲在它的價值...

回答

1

這樣做的一種方法是在EJS注入數據服務器端JavaScript變數

<script>var x = <%server data%></script> 

然後你可以在沒有額外的HTTP請求的情況下取回它的客戶端。稍微比你提到的黑客更清潔。

1

有其在權衡是否要使用AJAX VS隱藏元素幾個因素。

使用AJAX的優勢在於您可以加載頁面模板,並且所有靜態內容都可讓瀏覽器在客戶端檢索動態內容之前呈現頁面。如果您需要從數據庫加載內容或計算輸出,這會帶來好處。基本上,如果你加載了一些很大的東西,或者可能需要一些東西來檢索,那麼你應該在加載頁面後使用AJAX來允許用戶等待較少的結果。另一個優點是您可以實時顯示結果,並且可以向客戶端提供進度報告(例如進度條),或者可以在從源(db,google,facebook等)加載時實時加載搜索結果)。

使用隱藏元素的好處是,您將佔用較少的HTTP請求/響應來加載單個頁面。如果您只需要加載用戶名稱,或簡短的傳記和一些鏈接,則應將其與模板一起加載。但是,如果您需要加載所有用戶最新博客帖子的結果,則應該使用AJAX進行此操作。使用隱藏元素更容易實現,但單獨無法實時更新。另外,一個側面說明,這不是「hackish」。 jQuery對很多事情都是這樣做的,比如元素之間的動畫,或者只是隱藏非活動標籤的jQuery-UI標籤。這基本上是隱藏元素的預期目的。

這個問題不應該使用哪個問題,而應該針對每個特定的目的使用哪種技術。考慮這些利弊,你應該走在正確的道路上。當你不需要AJAX時,你可能不應該這樣做。過度使用可能會造成浪費。

+0

問問你自己。你的變量是否改變,用戶是否需要知道它是否實時?變量是否需要一段時間才能加載或發送給客戶端?如果是,那麼考慮AJAX。 – tsturzl