2012-02-09 71 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