2011-09-02 61 views
1

我現在正在使用PHP自己的MVC框架。我試圖找出如何處理Ajax請求,但...如何在PHP中使用MVC處理Ajax請求

一個頁面使用URI www.domain.com/controller/method/params

所以URI通過路由器內置傳遞類,獲取控制器和方法+參數使用。

這聽起來不錯,但我也會有一個頁眉和頁腳,甚至在實際頁面上也可能有一個側欄,並且MVC將填充頁面的主要內容部分。

當我做一個Ajax請求,但是,例如www.domain.com/user/create:控制器=用戶的方法=創建

那麼我會嘗試重新構建整個頁面,因爲它是發送請求到我的應用程序。

我很困惑如何正確處理這個問題?

+0

也許我不理解你,但不應該建立頁面的行爲是一種方法(或幾種方法)?如果是這樣,那麼我不明白爲什麼用戶 - >創建與實際構建頁面有什麼關係。我不知道,我可能完全錯過了這艘船,所以我會閉嘴。 :) – Herbert

+0

你可以請指定你正在使用哪個MVC框架???? – Vins

+0

@Vins - 他說他自己做 – Galen

回答

3

這裏有一些不完整的答案。以下是你如何做,這很簡單...

你要做的是檢查AJAX標題,並根據它提供不同的內容。阿賈克斯頭是:

$_SERVER['HTTP_X_REQUESTED_WITH'] 

將設置爲XMLHttpRequest爲AJAX請求。這是一個標準其次是所有主要的JavaScript庫。

當我做雖然Ajax請求,例如到 www.domain.com/user/create:控制器=用戶方法=創建

所以,知道這一點,我們可以檢查AJAX頭在你的方法中並相應地顯示輸出。

function create() { 

    // code to create user 

    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
     // return new user id in json format (xml) 
     die(json_encode(array('user_id' => $new_user_id))); 
    } 

    // load views hear 
} 
+0

我明白這一點,但我應該在哪裏建立我的網頁template-header-footer,等等......? – JasonDavis

+0

在我的代碼中,您將在if語句之後立即構建您的視圖。一個AJAX請求會殺死if語句中的腳本。 – Galen

1

這真的取決於你在做什麼樣的框架,但通常我所做的並不是呈現完整的視圖,而是迴應我需要的一小部分內容。

所以,如果你是通過ajax創建一個用戶,也許你想返回的是一個整數,用戶id成功。

所以:

class User { 
public function create(){ 
    $uid = //create user in database return primary key 
    echo $uid; 
    exit; //we stop execution here so we don't render the full layout 
} 
} 

所以你的請求字面迴應將是「9」(如果這是生成的主鍵)

比較它與正常的完整頁面操作,你去取你的佈局,每個compontent然後渲染爲你裝載例如特定頁面視圖:

class Home { 
public function index(){ 
    $homeView = //loadHomeView 
return $homeView 
} 

這通常是我如何處理它,這不是真正的代碼,但應該得到這個觀點。

+0

是的,@Aknosis說的是什麼。 :)(請參閱我對上下文問題的評論)+1 – Herbert

0

你能指定你正在使用的框架嗎?

如果你使用一些標準的框架,那麼在框架一些標準的方法來使用ajax要求如在cakephp有一個名爲ajax默認佈局。在cakephp我們可以使用類似$this->autorender = false的字符串來傳遞一些json字符串或xml字符串。

0

使用die()exit()停止前的代碼執行和渲染所有頁面

+0

只是一個小小的提示:exit是一個構造,因此您不必包含括號:die;或退出;都將工作。如果你提供了一個參數來退出,它將會是腳本的退出狀態(如果在命令行上運行的話)並且死亡參數將在退出之前作爲輸出進行回顯。 – Aknosis