2010-05-28 79 views
5

我想過擁有一個AJAX模塊服務層,其中包含與我的模型交互的控制器和操作。容易,但不是很可擴展,會違反幹。如果我改變一些流程的物流,我將不得不編輯AJAX控制器和常規控制器。針對Zend Framework應用程序構建AJAX的最佳方法

因此,理想情況下,我會爲javascript和非javascript用戶加載完全相同的動作。我想過可能檢查$_POST['ajax'],如果它被設置,我會加載一個不同的(json'y)視圖的數據。想知道如何/一個好的方法來做到這一點(我想象的前端控制器插件?),或者如果有人能指出我一個UP TO DATE教程,它描述了構建一個更大的ajax應用程序的真正好方法。

回答

5

實際上,你可以使用請求對象,以確定是否請求通過Ajax發生,如:

// from your controller 
if($this->getRequest()->isXmlHttpRequest()) { 
    // an ajax request, do something special (e.g. render partial view) 
} else { 
    // render entire view 
} 

這基本上爲x-requested-with頭測試(這是不是總是目前,根據JS庫等)。見(的 '檢測Ajax請求' 的標題下):

http://framework.zend.com/manual/en/zend.controller.request.html

+0

'getRequest'應該是'Request()方法' – chelmertz 2010-05-28 13:59:57

+0

@chelmertz - 感謝您的。 – karim79 2010-05-28 14:09:27

+0

@ karim79你認爲只接收Ajax請求的模塊是一個很好的實踐嗎? – JCM 2011-09-09 19:12:48

1

您可以檢查XmlHttpRequest標頭。然而,並非所有的Javascript庫都這樣做,甚至不是所有的瀏覽器都能這樣做。

還有AjaxContext,它基本上檢查「上下文」請求變量,類似於您的想法$ _POST ['ajax']。

我實際上最終做的和你原來的建議類似。我創建了一個AJAX模塊。爲了防止大量的控制器代碼重複,我創建了一個服務層來處理模型上的所有操作,所以我的控制器實際上只負責轉換輸入請求和顯示。

相關問題