2011-08-03 58 views
1

這更多的是「我是否正確思考」而不是問題。更好地加載整個頁面,然後顯示一個片段,或只加載片段?

我有一個控制器,並且其中加載頭視圖的函數,動態內容視圖,和頁腳視圖。

在我的內容視圖有是上點擊jQuery的使用改變了內容的鏈接。它通過加載(使用.load())完全相同的控制器,但傳遞一個var $ ajax ='yes'來實現。

使用這個我控制器知道不要再加載頁眉/頁腳,而是隻加載內容的一部分。

這個效果很好。

然後我偶然發現了jqueries加載片段的能力。我正確地認爲,我的做事方式在資源使用方面更好,因爲利用片段加載,我將加載整個頁面,然後顯示片段.. I.E不存儲。

假設是正確的,是有什麼辦法可以實現我試圖有效地實現它不需要:

if(!$ajax){load header/footer} 

在每次開始和每一個基於AJAX的控制器功能?

回答

0

笨的內置的方法來檢查,如果請求來自AJAX源

$this->input->is_ajax_request(); 

,這樣你就不需要經過$ajax回到知道它的Ajax。

我認爲在服務器端檢查ajax比使用帶選擇器的jquery的​​效率高很多,因爲你仍然在請求中加載整個頁眉/頁腳,jquery只是在選擇你在追求的內容。所以就性能而言,你看不到比靜態頁面有任何改進,除了沒有整頁刷新。

0

我還沒有和codeigniter合作過一段時間,但是如果我沒有記錯的話,它有一個叫做IS_AJAX_REQUEST的常量,所以你不需要通過請求本身來傳遞它。

回答你的問題,如果你創建控制器基類,它擴展了CI控制器(不知道確切的類名,對不起),使您的所有其他控制器擴展它,這是可能的。

然後,你可以寫你的自定義功能,渲染,將檢查IS_AJAX_REQUEST,要麼渲染整個佈局或只有特定的視圖。

但是你必須弄清楚如何處理重定向和東西。或者,也許不是渲染視圖,而是想輸出JSON。

回答您的其他問題,是的,它應該是更好地只加載HTML的部分不是呈現完整的文件,並從它採取的一部分。但是你可以計算你的頁眉和頁腳的大小。我不認爲這是多少。所以我想你應該主要針對改善用戶體驗。