在javascript中调用php类函数(ajax)
问题描述:
我想知道是否有任何好的做法,以Ajax的方式从Javascript类中调用方法。在javascript中调用php类函数(ajax)
这是我现在的“样式”来执行它。
(类中的方法,这里只是举例)
PHP端:
<?php
if(isset($_POST['action']) && $_POST['action'] != null)
{
extract($_POST);
if($action)
{
$ajaxCommand = new EleveUpdate();
if(method_exists($ajaxCommand, $action))
{
$reponse = call_user_func(array($ajaxCommand, $action),$_POST);
echo $reponse;
exit(0);
}
else
{
throw new Exception("Cette méthode n'existe pas");
}
}
}
else
{
echo 'Cette action n\'est pas autorisée';
return false;
}
class EleveUpdate
{
public function __construct()
{
}
public function testfunct($data)
{
echo $data['eleve'];
}
}
JavaScript端:
$(document).ready(function() {
$.ajax({
url: 'eleveupdate.php',
type: 'POST',
data: {
action: "testfunct",
eleve: 1
},
beforeSend: function()
{
loading(true);
},
error: function()
{
console.log('error');
},
success: function(data)
{
loading(false);
console.log(data);
}
});
});
的问题是,isset $ _ POST总是在我的班级中,我很确定这不是正确的做法,我在这里找到了帮助。
感谢您提前
西蒙
答
的问题是,这并不容易调用基于字符串请求范围,namings。 您可以使用称为LAMBDA或匿名函数的东西。通过这种方式,您可以存储附有LAMBDA的字符串数组。就像这样:
<?php
class EleveUpdate {
private $funcs = array();
function __construct($which_function) {
$funcs['testfunct'] = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
$funcs[$which_function];
}
}
?>
在这里看到更多的信息:http://www.php.net/manual/en/function.create-function.php
你可能甚至不需要再类用这种方法,但只是显示。
你认为应该发生什么,而发生什么呢?此外,尝试将类声明放在最前面。 – gd1 2013-02-17 22:01:45
这个想法是有一个更“优雅”的方式来做到这一点。这种方法完美地工作,但是,我不知道我是否想要像这样使用它。一切都按照我想要的方式返回,但我想要找到“良好实践”的方式:) – Simon 2013-02-17 22:13:51
我看到的唯一'问题'是有人可以从外部调用你的课程的任意方法。如果你的课程只包含“安全”方法,那就没有问题了。而且,我不喜欢对$ _POST变量使用extract()。 – gd1 2013-02-17 22:17:43