2013-02-18 165 views
0

下面是一個非常簡單的和愚蠢的問題,我要問:如何調用PHP函數和不是PHP類AJAX調用

我很新的PHP,我在想,如果有一個通過AJAX調用一類PHP中的函數。

例如是這樣的:

$.ajax({ 
     url:'newPHPClass.php/My_Function_Name' 
     ... 
}); 

所以在PHP中,它會像:

<?php 
class newPHPClass { 
    function My_Function_Name(){ 

    } 
} 
?> 

爲什麼需要這個?所以我不會喜歡這麼多的PHP文件。相反,我將有一個內部具有不同功能的單個php類。它會看起來更乾淨,更少的額外文件。

我以前使用過ASP.NET MVC C#。在ASP.NET中,我只需簡單地將我的控制器名稱放入AJAX的URL部分,然後輸入/,然後輸入我的函數名稱(可以在我的Global.asax.cs文件中修改該名稱)。

謝謝。

+0

當然,只是使用查詢字符串,並從中捕獲函數名稱(發送函數名稱在$ .ajax數據:參數將執行相同的操作),並執行該函數? – adeneo 2013-02-18 01:07:31

+0

只需通過在網址中提交請求即可查看允許用戶執行哪些功能...你不想讓人們提交惡意請求 – 2013-02-18 01:08:56

+1

你在'ASP'中使用了框架,所以你可以很容易地傳遞你的'controller name'和'method name',因爲這些框架是用路由設計的,但是如果你想做同樣的事情'php'然後可以使用'php'框架(如[laravel](http://laravel.com/)或其他),否則你不能只傳遞'class name'和'method name',它會贏得'這樣工作。 – 2013-02-18 01:47:32

回答

1
<?php 

$action = $_POST['action']; 

class Foo { 

    function execute($action) { 
     switch($action) { 
      case "method1": 
       $this->doMethod1(); 
       break; 
      case "method2": 
       $this->doMethod2(); 
       break; 
     } 
    } 

    function doMethod1() { 
     echo "Foo::doMethod1"; 
    } 

    function doMethod2() { 
     echo "Foo::doMethod2"; 
    } 
} 

$foo = new Foo(); 
$foo->execute($action); 

?> 

並使用foo.php?action=method1作爲URL。所有的

+0

在閱讀Sheikh Heera對quetion的評論後,我在腦海中思考的問題完全一樣。反正,感謝一羣夥伴:) – moamzia 2013-02-18 02:05:43

+0

爲什麼?沒有人說這個類的方法必須包含所有的邏輯。這可能是一個名爲'Router'的類,並使用它的方法將調用包裝到一個單獨的類中。 順便說一句,我不認爲這是最好的面向對象的方法,但我只是回答OP的問題;) – 2013-02-18 02:13:35

1

首先,你不要通話函數或方法通過AJAX,你使到一個頁面的請求。 如果你做一個AJAX調用的PHP文件,如:

<?php 
class newPHPClass { 
    function My_Function_Name(){ 

    } 
} 
?> 

什麼都不會退還,不會發生任何事情不是立即該類分配的空間,然後在請求結束摧毀它的其他服務器端。

對於你的問題:它在客戶端(Javascript)並不重要如何管理類和文件組織:只有一個文件將被AJAX調用請求。

我建議你至少有兩個不同的文件:函數或類的聲明和管理響應的文件。你需要一點點的執行,並宣告分離,因此我會避免類似的事情:

class A { ... } 
$a = new A; 
$a->myMethod(); 

根據AJAX輸出我的東西是這樣的,而不是:

# class.php 
class A {...} 

# ajax.php 
$a = new A; 
$a->myMethod(); 

最後一個建議:當他們沒有意義時,不要使用類。把一大堆函數分組到一個類中並不真的讓我感到OOP。我認爲你正在使用帶有程序代碼的類。因此,我會用一個聲明一堆函數的文件來代替。

+0

Jeffrey,謝謝你的好解釋。但是,我使用新的PHPClass作爲我的問題中的名稱參考,以便更容易理解訪問此頁面的其他人。另外關於一個文件可以通過AJAX調用進行調用,我很清楚這一點,但是由於我有許多級聯下拉菜單,因此我在一個頁面中有多個AJAX調用。因此,我問了這個問題,所以在我的網站中,我將不會有幾乎完全相同內容的許多不同頁面(只有幾個變量會有所不同)。我認爲A.羅達斯給出了一個很好的答案。感謝您的時間和答案。 – moamzia 2013-02-18 02:11:47