使用Ajax.Request调用PHP方法

时间:2010-01-15 12:44:09

标签: php javascript prototypejs

使用Ajax.Request(使用原型)在PHP文件中调用某个方法的最佳方法是什么?我正在使用Form.serialize提交表单,所以我想添加一个参数(比如要调用的方法的名称),然后在服务器脚本上检查它。 类似的东西:

var params=Form.serialize("someform")+"&=method='check_data'";
new Ajax.Request('somescript.php',{method:'post',parameters:params,onSuccess:
function(response)
{ 
    .. do something with the response

在somescript.php中:

if($_POST["method"] == "check_data")
{
    check_data();
...
}

这可行,但我确信这是一种更好或更简单的方法来调用远程方法(ala MVC)。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在任何情况下都不能用于普通的PHP方法。它打开了一个巨大的潜在安全漏洞。即使你限制了那种可以调用的命令,从长远来看也不是一个好方法。

要么保留你已经做的事情:定义一个可以传递给PHP脚本的命令列表(例如command=deletecommand=updatecommand=copy,无论你需要什么),以及使用switch给他们打电话。

或者使用具有可以从外部安全调用的方法的类:

class myCommands
{
  function copy()  {  ... }
  function delete()  {  ... }
  function update()  {  ... }
 }

然后,在PHP文件中,传递像

这样的命令
if (method_exists($class, $_POST["method"]))  
 call_user_func(array($class, $_POST["method"]));