测试中的片段:
my $request = HTTP::Request->new( POST => 'http://192.168.5.130:3000/user' );
$request->content_type('application/json');
$request->content( $query_string );
my $result = $ua->request( $request );
来自ajax电话的片段:
$.ajax({
url: 'http://192.168.5.130:3000/user',
type: 'POST',
cache: false,
async: true,
dataType: 'json',
timeout: 5000,
data: $("#create-user-form").serializeObject(),
error: function(jqXHR, textStatus, errorThrown){
console.log("jQuery ajax error....");
},
);
在控制器中是路由处理程序(使用Catalyst::Controller::Rest
)
sub user_POST {
my ($self, $c, $args) = @_;
warn Dumper( $c );
...
}
我遇到的问题是,当我从测试中调用内容时
在一个哈希中的Catalyst对象中设置一个名为'data'的键,它可以是
访问时请致电$c->req->data
。
但是,当从网页进行ajax调用时,数据是
在一个哈希中保存在Catalyst对象中,其中包含一个名为“ parameters ”的键
通过致电$c->req->parameters
访问。
任何人都知道为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:0)
我不完全确定,但我怀疑jQuery会将您在Ajax请求中发送的数据附加到GET查询字符串。我怀疑的一部分是我不知道你的Ajax片段中.serializeObject()
做了什么。
您可以查看有关data
和processData
选项的documentation,看看是否有帮助。
以下是相关部分:
数据强> 要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
...
<强>过程数据强> 默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型“application / x-www-form-urlencoded” 。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。
答案 1 :(得分:0)
Catalyst将输入存储在两个不同的位置。查询字符串参数在
中可用$c->request->query_params
和身体参数可在
中找到$c->request->body_params
要获得所有输入,请使用
$c->request->params
来自Catalyst :: Controller :: REST模块的文档:
The HTTP POST, PUT, and OPTIONS methods will all automatically deserialize the
contents of $c->request->body into the $c->request->data hashref