在php中处理ajax请求的最佳方法

时间:2014-07-08 11:59:43

标签: javascript php ajax

这是通过javascript调用php函数的好方法吗?

我的POST数据如下:

{
    0: [
        {
            "name": "function",
            "value": "toggle_user_status"
        }
    ],
    1: [
        {
            "name": "user_id",
            "value": "1"
        }
    ],
    ...
    ...
}

我的Ajax类看起来像这样:

<?php
class Ajax
{
        public function handleAjax() {
                $load_function = $_POST['function'];
                return call_user_func(array($this,$load_function));
        }

        private function toggle_user_status() {
                return '555nase';
        }
}

我知道$ _POST var不安全,但这不是重点。我想知道这是否是一种调用函数的好方法......?

PS:网址http://local.yolo/admin/ajax仅接受来自登录管理员的请求

2 个答案:

答案 0 :(得分:0)

只需检查来自js的功能。使用这样的东西:

<?php
    class Ajax
    {
        private $_allowed_functions = array('toggle_user_status');

        public function handleAjax() {
            $load_function = $_POST['function'];
            return in_array($load_function, $this -> _allowed_functions) ? call_user_func(array($this,$load_function)) : NULL;
        }
    }

答案 1 :(得分:0)

我知道您并不关心安全隐患,也不了解它们。不过,这不是一个好主意。原因是,您的JavaScript必须知道PHP实现。如果您在PHP方面改变了某些内容,则必须在JavaScript端进行更改。最好要求 PHP软件做某事,但你不关心它是如何做到的。

例如,您可以为JavaScript定义公共接口,公共接口是URL。你不关心他们如何处理任何事情,你只想获得一个跟随你定义的公共接口的响应。例如:

jQuery.post("/admin/user/toggle-status", { id: 1 });

此时URL是公共接口。

用户类处理与用户相关的事情:

<?php

interface UserInterface {

  public function toggleStatus();

}

AJAX类处理AJAX调用:

<?php

class AJAX {

  public function handle() {

  }

}

分离关注点很重要。