我是Jquery和Ajax的新手..请忍受我的愚蠢问题..
我试图通过ajax调用在类 hello 中调用方法说test()..
hello.php
class hello
{
public function test()
{
//some data
}
public function abc()
{
//some data
}
}
现在我想从另一个php文件中调用 test() ...
例如:
b.php
$.ajax({
url : 'hello.php->test()', //just for example i have written it bcz it should call only test() not abc()..
})
是否可以直接调用它?我已经通过$ .ajax()api,但我发现没有任何帮助..
所有答案都将得到赞赏......
答案 0 :(得分:1)
一种方法是通过ajax POST或GET传递类的名称,构造函数参数以及方法名称和参数等,例如:
var url = 'callMethod.php';
var data = {
str_className: 'Hello',
arr_consArgs: {arg1: 'test1'},
str_methodName: 'test'
};
$.post(url, data, function(response) {
etc.
});
在名为callMethod.php
的PHP脚本中:
/* Place your 'Hello' class here */
// class
$str_className = !empty($_POST["str_className"]) ? $_POST["str_className"] : NULL;
if ($str_className) {
// constructor
$arr_consArgs = !empty($_POST["arr_consArgs"]) ? $_POST["arr_consArgs"] : array();
// method
$str_methodName = !empty($_POST["str_methodName"]) ? $_POST["str_methodName"] : NULL;
if (!empty($str_methodName)) {
$arr_methodArgs = !empty($_POST["arr_methodArgs"]) ? $_POST["arr_methodArgs"] : array();
}
// call constructor
$obj = fuNew($str_className, $arr_consArgs);
// call method
$output = NULL;
if (!empty($str_methodName))
$output .= call_user_func_array(array($obj, $str_methodName), $arr_methodArgs);
// echo output
echo $output;
}
其中:
function fuNew($classNameOrObj, $arr_constructionParams = array()) {
$class = new ReflectionClass($classNameOrObj);
if (empty($arr_constructionParams))
return $class->newInstance();
return $class->newInstanceArgs($arr_constructionParams);
}
答案 1 :(得分:1)
试试这个:
<强> hello.php 强>
class hello
{
public function test()
{
//some data
}
public function abc()
{
//some data
}
}
if(isset($_GET['method'])){
$hello = new hello;
$hello->$_GET['method']();
}
<强> b.php 强>
$.ajax({
url : 'hello.php?method=test', //just for example i have written it bcz it should call only test() not abc()..
})
按照他们的方式,通过ajax请求公开你的课程是不安全的。