我正在构建一个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);
答案 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();
});