1

我正在构建一个 AJAX 表单,并尝试通过 JSON 发送 3 个字段。

在客户端,表单被序列化并输入 JSON 格式:

$('#form-signin').live('submit', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel2';

    $.ajax({

        type: "POST",
        url: url,
        data: $.base64.encode($('#form-signin').serialize()),
        dataType: 'json',

        success: function(data, status) {
            $.getJSON(url, function(data) {
                $('#ajax').html($.base64.decode(data.html));
                $('#ajax').modal();
            });
        }
    });
    event.preventDefault();
});

服务器端,我的路由器拆分 URL 请求,看到第一部分包含“ajax”,然后继续专门将路由请求传递给 AJAX 处理程序。

我的问题是,即使在路由器内部,检查$_REQUEST用于获取帖子信息的内容,帖子数据也不存在。也是如此$_POST

即使是请求命中的第一页 (index.php),$_REQUEST也没有数据。

我究竟做错了什么?

服务器端,

请求被发送到包含 Autoloader 和 init 脚本的 index.php。

init 脚本初始化数据库连接,设置错误、异常和会话处理,然后将请求传递到路由器。

路由器,在其构造方法中:将 URL 设置为数组(已分解$_SERVER['REQUEST_URI']),然后设置相关的控制器、方法和附加参数。

在这种情况下,因为我们正在执行 ajax 请求,所以在我们发送请求之前会发生特殊处理。

方法参数设置为:

    $requestParams = $_REQUEST;
    unset($requestParams['url']);

此请求参数以及附加信息(url、控制器、方法和数据库对象)被传递以进行调度。

在所有情况下,我们主要使用这种方法进行调度:

            $dispatchedController = new $this->controller($this->database);
            $method = $this->method;

            return $dispatchedController->$method($this->params);
4

3 回答 3

1

如果我记得很久以前使用插件的时候,方法 $.base64.encode() 返回一个字符串,所以你可能发送到服务器的东西就像一个没有值的单个参数。

我相信你应该做类似的事情

data: "foo=" + $.base64.encode($('#form-signin').serialize()),
于 2012-12-24T16:06:35.137 回答
0

代码应该可以工作(假设您的 HTML 不是这里的问题,例如,'#form-signin'是正确表单的正确选择器)。

您提到您无法在服务器端获取数据。但是,您确定您甚至可以从客户端发送您需要的数据吗?例如,您是否使用 Firebug 等工具分析过请求?

于 2012-12-24T15:44:26.710 回答
0

您不会将 json 发送到服务器,而只是一个 base64 编码的字符串。您还期望密钥/对值。要发送键/对值,只需将序列化的表单数据传递给 $.ajax 函数。

$('#form-signin').live('submit', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel2';
    $.ajax({
        type: "POST",
        url: url,
        data: $('#form-signin').serialize(),
        dataType: 'json',
        success: function(data, status) {
            $.getJSON(url, function(data) {
                $('#ajax').html($.base64.decode(data.html));
                $('#ajax').modal();
            });
        }
    });
    event.preventDefault();
});
于 2012-12-24T16:12:51.420 回答