2009-10-04 18 views
2

我正在將我的標準PHP項目轉換爲OOP,但我遇到了關於如何使用PHP類處理AJAX調用的問題。我現在不喜歡我現在這樣做。我有一個TillAjax.php文件,我從我的TillUI.php文件中調用AJAX調用。PHP OOP和AJAX:如何在Class中處理serverside?

在TillAjax.php文件我這樣做是爲了得到Ajax調用傳遞的信息。

$till = new Till(); 
if(isset($_POST['data'])) 
    $till->doStuff($_POST['data']); 

我認爲這會破壞面向對象。

我與ASP.NET MVC和這裏的工作可能要調用的控制器的具體動作,而我要檢查的崗位價值。所以我想知道是否有更智能的PHP方式來解決上述問題?

回答

6

我使用的方法是有一個Ajax類。

你的PHP文件調用Ajax::Process($_GET['handle']),其中「把手」包含一個靜態類方法的名稱,因此,或許「直到::進程」。 Ajax類根據允許的函數列表(即允許通過ajax調用的函數)檢查函數,然後使用call_user_func_array來調用函數(我的代碼使用$ _POST的內容作爲參數傳遞給函數)。該函數的返回被自動編碼爲json並輸出到客戶端。

這意味着你的目標PHP文件看起來是這樣的:

<?php 

//File: ajax.php 

include ("Ajax.php"); 

Ajax::Process($_GET['handle']); 

?> 

我認爲這是非常簡單的。

然後你就可以擁有的JavaScript看起來像這樣(jQuery的):

$.get('ajax.php?handle=Till::Process', {}, function(result) { 
    //called on page response 
}); 

所以那麼現在結果中包含任何數據從PHP的方法直到::進程返回。

+0

1因此,在使用驗證一個簡單的輸入形式的情況下,一個不需要使兩個功能,即驗證()返回結果和validateAjax該回聲結果?你可以迴應什麼Ajax :: validate返回正確的? – imperium2335 2013-06-29 09:57:22

+0

是的,雖然我用它的方式是從ajax函數輸出JSON,而不是HTML。很明顯,你可以調用一個輸出HTML並在AJAX調用完成時顯示的函數。 – Kazar 2013-07-02 08:30:26

+0

如果你想調用一個非靜態方法,它會是:$ .get('ajax.php?handle = class-> method'...? – imperium2335 2013-08-29 08:24:33

1

您是否考慮過使用PHP MVC框架,如CodeIgniter,CakePHP,Kohana等?他們會讓你將請求路由到特定的控制器方法。如果遷移到這些框架之一是您的選擇,它將是一個更清潔的解決方案。