POST中没有发送JSON数据?

时间:2012-12-24 15:40:13

标签: php javascript jquery ajax json

我正在构建一个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也没有数据。

我做错了什么?

服务器端,

请求被发送到index.php,其中包括Autoloader和init脚本。

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);

3 个答案:

答案 0 :(得分:1)

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

我相信你应该做像

这样的事情
data: "foo=" + $.base64.encode($('#form-signin').serialize()),

答案 1 :(得分:0)

代码应该有效(假设您的HTML不是问题,例如,'#form-signin'是正确表单的正确选择器。)

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

答案 2 :(得分: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();
});