0

这是我的 ajax_handle 文件:

   if ($_SERVER['HTTP_X_REQUESTED_WITH'] !== "XMLHttpRequest") 
    {
        echo "Error"; 
        exit();

    }
    $req = explode("_",$_POST['req']);
    $className = $req[0] . "Controller" ;
    $methodName = $req[1];
    $file = "application/controllers/" . $className . ".php" ;
    require_once $file;
    if ($_POST['data']) {
        var_dump($_POST['data']);
    }
    $controller = new $className;
    $result = $controller->$methodName();
    echo json_encode($result);

我将参数作为 $_POST['data'] 变量中的任何数组发送。我不知道将它们传递给(动态)$methodName 函数的最佳方法是什么。

4

1 回答 1

1

我想您可以$_POST['data']按原样传递给您的动态方法。您可以让动态方法接受数组,但最初设置默认值,以便您可以轻松处理和验证它们。例子:

class AController
{
  public function dynamicMethod($params)
  {
    // Set default values but allow them to be overridden by $params
    $locals = array_merge(array(
      'name' => 'John Doe',
      'address' => 'Nowhere',
    ), $params);

    // Do stuffs and return result. Example:
    return array('nameAndAddress' => $locals['name'] . ' lives at ' . $locals['address']);
  }
}

您还可以选择使用extract()将 上述内容转换为真正的局部变量nameaddress

在您的 ajax 句柄中:

$controller = new $className;
$result = $controller->$methodName($_POST['data']);
echo json_encode($result);

说了这么多,请注意@Sven 所说的是正确的。您当前的方法存在一些安全问题。

于 2013-07-25T03:30:54.533 回答