2012-07-16 68 views
1

可能重複:
MVC ajax calls - where to handle them?我應該在我的MVC框架中使用ajax?

我有一個框架,整體示意圖如下:
enter image description here 這畫是PHP 5,社交網絡的書,我不知道有Page Object部分。我沒有任何問題與簡單的JavaScript/jQuery語句,但是當涉及到JSON或Ajax我需要獲取數據,然後我很困惑!因爲在JSON中,我們需要把url部分。在MVC中沒有直接的電話。一切將達到前臺控制器(index.php)。
現在的問題是如何處理MVC中的JSON或Ajax請求?我應該在另一個目錄中創建單獨的json php文件來處理不是面向對象的數據庫連接等嗎?

回答

0

我不知道你正在使用哪個框架,但是Zend Framework例如有一個機制,允許你修改一個動作返回其數據的格式。在Zend Framework中,這被稱爲上下文切換。

你可能想看看他們是如何實現該功能的,看看你是否可以將它集成到你的mvc中,或者在你自己的mvc中建模它。

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.contextswitch

---編輯---

這聽起來像你的框架不會委託給控制器?如果是這種情況,我會實施您在您的問題中暗示的解決方案,並實施僅由您的Ajax/REST調用消耗的腳本。

---編輯---

權利,使您的前端控制器請求轉發給控制器,這是我會建議實施背景下的控制器級切換,這將工作使用相同的網址,你可以使用的情況下在標準請求中,但要麼讀取

a)HTTP標頭信息以查看您要在AJAX請求中設置的響應類型。

b)在url中發送另一個參數,如format=json,它將切換您的動作的返回類型。

我會推薦閱讀我發佈的鏈接中的信息,因爲它可能會使事情變得更加清晰。

+0

我自己的框架。我自己創建了一個類似於我發佈的圖片。 – ALH 2012-07-16 07:40:51

+0

對。我需要在前端控制器(JSON格式,普通視圖)中切換視圖,然後根據需要發回數據。這是你說的嗎? – ALH 2012-07-16 08:05:37

+0

@phpGeek我建議在控制器級別切換,因爲前端控制器不直接與其自身的視圖進行交互。 – martynthewolf 2012-07-16 08:12:54

1

你應該帶參數的「特殊」呼叫FrontController設計指定它在後Ajax調用和不同的方式處理它,例如:

if($_POST['retrieve_postaction']){ 
    //general action 
    //load object and do stuff 
    if($_POST['is_ajax']){ 
     //format data for an ajax call and return it 
     echo json_encode($array_object); 
     exit;} 
    else { 
     //normal action 
    } 
    } 

} 
+0

你的意思是ajax的URL部分總是指index.php? – ALH 2012-07-16 07:42:43

+0

是的,您所做的調用始終在控制器上,就好像您要調用常規操作一樣,但參數會將調用標識爲「Ajax」,以便您可以以不同方式檢索和管理響應。這是一些電子商務平臺使用的慣例,這很好,因爲你的邏輯部分不會有不同的接入點,並且它保持在一個地方(更容易調試/修改或添加功能,而無需在項目中移動) 。 – kawashita86 2012-07-16 08:26:33

相關問題