我正在构建一个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和初始化脚本的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);
发布于 2012-12-24 16:12:51
您不会将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-24 16:06:35
如果我记得很久以前使用过一个插件,那么$.base64.encode()方法返回一个单独的字符串,所以您发送到服务器的可能是一个没有值的单个参数。
我相信你应该做像这样的事情
data: "foo=" + $.base64.encode($('#form-signin').serialize()),
发布于 2012-12-24 15:44:27
代码应该可以工作(假设您的超文本标记语言不是问题所在,例如,'#form-signin'
是正确表单的正确选择器)。
您提到您无法获取服务器端的数据。但是,您是否完全确定正在从客户端发送所需的数据?例如,您是否使用Firebug等工具分析过请求?
https://stackoverflow.com/questions/14023225
复制相似问题