2011-08-31 60 views
0

我已經看到加載包含頁眉,頁腳等的index.html頁面的網站,然後使用單個AJAX請求加載所有數據,並使用Javascript進行格式化並將其顯示在列表中。這個叫做JSON/AJAXless的設計模式是什麼?

例如。如果一個搜索引擎都做到這一點,JSON是這樣的:

searchresults: [ 
    {website: aaa.com, blurb: "This is from aaa.com", title: "AAA"}, 
    {website: bbb.com, blurb: "This is from bbb.com", title: "BBB"}, 
    {website: ccc.com, blurb: "This is from ccc.com", title: "CCC"}, 
    ... 100 more rows... 
] 

而且,它還將被JavaScript被格式化成一個頁面,它看起來像顯示前20個結果谷歌搜索結果頁。 好處是,點擊「page2」等可以使用JavaScript來顯示下一頁,而不需要對服務器做另一個AJAX請求或以正常方式加載新頁面。彈出窗口/擴展信息可以以相同的方式顯示,而無需向服務器發送額外的Ajax請求。

問題是,它只需要做一個 AJAX查詢頁面加載加載所有的數據,然後所有的處理都是在瀏覽器中用javascript完成的。不需要多個AJAX請求或對服務器的常規請求。這種設計模式有沒有名字?或支持這個JavaScript框架,以便我不需要在JavaScript中編寫整個事情?

回答

1

這可能被稱爲一個壞主意。

如果你將整個數據庫一起推送(或者大量數據),它可能不是一個好主意。一起推送額外的數據只會使請求花費更長的時間來加載,這是因爲服務器處理它需要更長的時間,並且還有更多的數據需要傳輸 - 最終,用戶可能並不需要全部數據。

此外,我不知道爲什麼JS庫需要專門支持這一點。它們中的大多數都支持執行Ajax請求,並且許多使用UI組件的應用程序還允許使用數據源(例如Dojo),因此您只需正常執行請求並將「內存」數據庫指定爲列表組件的源。

+0

我打算只推送前100個結果,而不是整個數據庫,但我想你是對的 - 初始加載時間會更長。 我還沒有聽說過將數據源分配給UI組件 - 我通常使用 'infoBox.innerHTML ='...''' 程序性地更新div我會研究分配數據源並查看它們是如何不同的。 – Crashthatch

0

有些我見過的應用叫做「單頁應用」(比如Gmail)。他們不會以常規的往返方式更改頁面,只需在客戶端更新DOM即可。我認爲他們通常會根據需要進行多個AJAX請求以獲取數據(因爲您通常不希望在啓動時將整個數據庫加載到應用程序中)以及進一步的AJAX請求來保存數據,但原則基本上就是你所描述的。

這些在問題被問到的時候並不存在,但現在它在2013年看http://backbonejs.org/(低級)和Angular.js或Ember.js(更高級別的單頁應用程序的JavaScript框架)。

您在客戶端有模型,顯示那些鏈接並自動更新以反映數據更改的模型的視圖,這些庫也可以處理到服務器的同步。