2012-02-09 73 views
0

有誰知道我可以如何通過AJAX(使用jQuery)從PHP類直接訪問函數。通過AJAX訪問PHP類功能

PHP:

class Blah 
{ 
    function __construct() 
    { 
    } 

    function doSomething(data) 
    { 
     echo "I am not an animal"; 
    } 
} 

的jQuery:

$.ajax({ 
     url: myClass.php, 
     data: Blah.doSomething(); "or" Blah->doSomething() "or whatever" 
    }); 

我知道這是一個最原始的例子,我只是想說明一點,我希望你能得到我的問題的要點。

目前我在做這些方針的東西:

$.ajax({ 
     url: myClass.php, 
     data: data : { 'type':'doSomething' } 
    }); 

||

if(POST['data']['type'] == 'doSomething') 
{ 
    $this->doSomething(); 
} 

而且我不喜歡它......

+1

你爲什麼不喜歡現在的解決方案? – axiomer 2012-02-09 18:08:38

+2

如果您的示例是真實的,請考慮安全隱患。任何人都可以從瀏覽器調用任意類功能! – paislee 2012-02-09 18:10:21

回答

5

你得到的結果需要創建該類的對象,然後調用所需的方法。 類聲明不會執行任何代碼。

例如,你可以在類下面補充一點:

class Blah { ... } 
$b = new Blah(); 
$b->doSomething(); 

UPDATE:

如果你想調用的POST發送的方法,你可以使用函數call_user_function:

$method_name = $_POST['method']; 
$b->{$method_name}(); 

更多詳情:http://php.net/manual/en/function.call-user-func.php

+0

請參閱*遠程過程調用* - http://en.wikipedia.org/wiki/Remote_procedure_call(RPC),例如** JSON-RPC ** - http://en.wikipedia.org/wiki/JSON-RPC – hakre 2012-02-09 18:22:54

1

現在我想不出比PHP輸出的JSON結果沒有更好的辦法,你通過的getJSON

0

這是不可能的。你現在擁有的可能是最好的方法。

1

我同意mazzucci的回答。我希望這會更完整。

PHP:

class SomeClass{ 
//definintion 
} 
$obj = new SomeClass(); 
$obj->doStuff(); 

HTML:

<input type="button" onclick="<?php $obj->doStuff(); ?>" id="btnAdd" value="Click Me" /> 

此外,你可以看看xajax的,一個可愛的小框架,它簡化了PHP < - > JavaScript的互動。它也可以從PHP調用js函數。這裏的鏈接:http://www.xajax-project.org/en/home/

3

我不知道你爲什麼喜歡這樣做。 它不是一個好的編程習慣。 但你可以嘗試這樣的事情

$.ajax({ 
    url: myClass.php, 
    data: {'call':'Blah.doSomething', 'args':5} 
}); 

並在服務器端,您可以像

$fun = explode('.', $call); 
$function = array($fun[0], $fun[1]); 
if (is_callable($function)) { 
    $response = call_user_func_array($function, $args); 
} 
echo $response; 
1
**Your class** 
class Blah { 
    function doSomething(data) { 
     echo "I am not an animal, I'm a ".data; 
    } 
} 

**Ajax call in other document** 
$.ajax({ 
    url: example.php, 
    data: info='beast' 
    success: data() { ... 
}); 

**in example.php** 
include (class.blah.php); 
$obj = new SomeClass(); 
$obj ->doStuff($_GET['info']); 
+0

您可以通過添加註釋來解釋您的代碼如何工作以回答問題,從而改進此答案。 – Craig 2012-12-13 00:28:00