首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JSON数据未在POST中发送?

JSON数据未在POST中发送?
EN

Stack Overflow用户
提问于 2012-12-24 15:40:13
回答 3查看 501关注 0票数 1

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

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

代码语言:javascript
运行
AI代码解释
复制
$('#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和初始化脚本的index.php。

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

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

在本例中,当我们在做ajax请求时,在我们分派请求之前会进行特殊的处理。

方法参数设置为:

代码语言:javascript
运行
AI代码解释
复制
    $requestParams = $_REQUEST;
    unset($requestParams['url']);

该请求参数连同附加信息(url、控制器、方法和数据库对象)一起被传递以用于分派。

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

代码语言:javascript
运行
AI代码解释
复制
            $dispatchedController = new $this->controller($this->database);
            $method = $this->method;

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-24 16:12:51

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

代码语言:javascript
运行
AI代码解释
复制
$('#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();
});
票数 0
EN

Stack Overflow用户

发布于 2012-12-24 16:06:35

如果我记得很久以前使用过一个插件,那么$.base64.encode()方法返回一个单独的字符串,所以您发送到服务器的可能是一个没有值的单个参数。

我相信你应该做像这样的事情

代码语言:javascript
运行
AI代码解释
复制
data: "foo=" + $.base64.encode($('#form-signin').serialize()),
票数 1
EN

Stack Overflow用户

发布于 2012-12-24 15:44:27

代码应该可以工作(假设您的超文本标记语言不是问题所在,例如,'#form-signin'是正确表单的正确选择器)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14023225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档