【发布时间】:2013-02-02 06:54:18
【问题描述】:
我想知道是否有什么好的做法可以通过 Ajax 从 php 类中调用方法。
这是我目前执行它的“风格”。
(类中的方法仅在这里举例)
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 总是在我的课堂上,我很确定这不是正确的做法,我在这里寻求帮助。
提前谢谢你
西蒙
【问题讨论】:
-
你认为它应该发生什么,而不发生什么?此外,尝试将类声明移到顶部。
-
这个想法是有一个更“优雅”的方式来做到这一点。这种方法效果很好,但是我不知道我是否想这样使用它。一切都按我的意愿返回,但我想找到“良好做法”的方式:)
-
我看到的唯一“问题”是有人可以从外部调用您类的任意方法。如果您的类仅包含“安全”方法,则没有问题。此外,我不喜欢将 extract() 用于 $_POST 变量。
-
在这种情况下使用提取物是一种“坏方法”吗? (这是我自己的信息:))
-
想象一个场景,你使用一个变量来表示某人具有像“管理员”这样的特殊能力,而你的代码说 if ($admin == true) blah blah。通过使用 extract(),某人可以将 admin=1 放入 AJAX 调用并成为管理员,因为 extract 从 URL 中获取值并用它替换了一个局部变量。
标签: php javascript jquery ajax class