2011-11-16 53 views
2

我需要將一些數據發送到網頁,理想情況下使用json格式,並且我想知道哪種方法最好,以及爲什麼。總體而言,你與他們有什麼好的或不好的經歷和驚喜。在創建時將JSON發送到頁面的最佳方式

  1. <script>var myJson = <? echo json_encode($myVar); ?>;</script>

    優勢:JSON是直接在JavaScript中,是將使用它。
    不方便:在html/dom中間的<script>是壞的(js屬於 到.js文件)。

  2. <div data-myJson='<? echo json_encode($myVar); ?>'>

    優勢:HTML5數據事情是容易的工作。
    不方便: 在dom中的一堆數據,它看起來並不優雅注:在我的 的情況下,我可以承受忽略「舊」瀏覽器。

  3. ajax應有盡有。

    優點:在這種情況下甚至不需要發送json,因爲它 已經可用(無頁面更改)。
    不方便:不是 真的是一個選項,因爲我需要重寫整個網站。

  4. 代替發送完整的json,將它存儲在會話中併發送一個 密鑰。

    優點:少移動數據
    不方便: 數據/會話情侶需要跟蹤,我喜歡我的會議保持乾淨整潔。 (即使用戶只是在流程完成前關閉該頁面)(不會關閉會話)。

  5. 餅乾。

    優點:herr ..是逆向邪惡的好東西嗎?
    不方便:像會話變量,但出籠。

  6. 在會話中存儲json,並在加載頁面時加載jjax。

    優點:概念上有點高雅。
    不方便:沉重,因爲ajax指令已將 添加到js文件中,並且必須管理該會話。 (和 已清理。如果頁面加載沒有完成,json將一直保留,直到我清理它或會話結束爲止 )。再加上html header意味着更多的帶寬,我們必須等待使用該對象的成功。

  7. 其他?

編輯:因爲似乎有點混亂,有選擇3「阿賈克斯的一切」,我的意思一個頁面加載,並所有內容通過AJAX加載,即使你通過菜單,指向其他頁面的鏈接,表單提交等。我認爲更傳統的導航(由服務器作爲新頁面發送的頁面),頁面做一個ajax請求來檢索服務器上的某個值(這裏是我的json對象),作爲第4點「會話」,作爲主頁數據必須在頁面發送後由服務器保留,以便稍後由ajax請求獲取。我爲此添加了選項6。

+0

第一個變體(I.E.函數調用,而不是變量賦值)很常用(例如:facebook),它屬於.js文件而非JSON。順便說一句,你不需要'JSON.parse'。 – Esailija

+0

#1看起來有點難看,但我沒有看到爲什麼它不能解決問題的原因,當然,如果JSON對象在頁面的生命週期內不會改變的話。 – Blazemonger

+1

谷歌在其谷歌加服務使用類似於您在自己的'變種OZ_initData'做(你可以看到,如果您查看網頁的源代碼),但數據是不完全的JSON,但不知何故類似於1號建議的東西。 – Nasreddine

回答

6

我毫不猶豫地推薦#1。你想在JavaScript中使用你的數據,對吧?當頁面加載時,#1是確保數據存在的最簡單方式和最直接的方式,就像一個普通的javascript對象。我一直以這種方式將數據從服務器端傳輸到瀏覽器端,並且工作起來非常漂亮。

你可以說是在一個Ajax調用加載數據創建您的數據和用戶界面之間更好地分離,但是這是一個額外的HTTP請求,這會減慢你的頁面加載。

+0

+1,但解釋#1與UI有什麼關係。如果用ajax調用取代#1,代碼將變得更加複雜。如果我們假定#1與JSONP風格的回調而不是變量賦值一起使用,那麼它就不會與它交互,它會自動發送到適當的處理程序。 – Esailija

+0

Re:與用戶界面相關 - 如果你無法忍受你的html頁面中的javascript的想法,你可以通過ajax調用來獲得更乾淨的東西。我個人絕不會這樣做。 – morgancodes

0

去過幾年,因爲這是要求,但對於其他人誰在這裏找到自己和好奇,我一直在做的選項#1的變化相當長一段時間。此外,Nike Plus也是如此。當頁面加載後,耐克將window.np = {}

我從來沒有真正找到了一個會議上,我的愛,但我已經試過:

window.data

window.app.data(由Symfony的啓發,從字面上使用屬性app

window.[app_name].data(耐克加上啓發)

window.initData(由Google+啓發)

就我而言,我覆蓋這些JS對象與骨幹型號/時的主要骨幹應用程序加載的集合。

相關問題