我正在试图找出为什么我没有看到$ .post(“/ url /”,{wtf:2})的参数。
我正在使用这个perl:
use strict;
use CGI;
my $cgi = new CGI;
print $cgi->header("text/javascript");
print "'no'";
use Data::Dumper;
warn Dumper({ (map {$_=>$cgi->param($_ )} $cgi->param), postdata=>$cgi->param("POSTDATA") });
当我发出$ .get(“/ url”,{wtf:2})时,我得到了我期望的结果并找到了 原木中的wtf为2。当我使用$ .post(“/ url /”,{wtf:2})时,我似乎没有 得到任何参数(在日志中只需$ VAR1 = {postdata => undef})。
我错过了什么?
Firebug显示:Transfer-Encoding是“chunked”,Content-Type是“application / x-www-form-urlencoded; charset = UTF-8”。此外,Post选项卡似乎显示了请求中的参数,但没有来自CGI的欢乐。
答案 0 :(得分:4)
可能是您的结果既不是application / x-www-form-urlencoded也不是multipart / form-data。 CGI doc可以这样说:
如果POSTed数据不是application / x-www-form-urlencoded或multipart / form-data类型,则不会处理POSTed数据,而是在名为POSTDATA的参数中按原样返回。要检索它,请使用以下代码:
my $data = $query->param('POSTDATA');
答案 1 :(得分:2)
如果你有权访问linux盒子,你可以设置'nc'(netcat)来监听端口80,看看你收到的原始请求。
我怀疑这是服务器方面的问题。也许一些Apache配置正在干扰?对不起,我无法提供更多帮助。
答案 2 :(得分:2)
我遇到了同样的问题,但我使用的是CGI :: Lite。
事实证明,jquery中的.post函数似乎会覆盖表单的内容类型,即使它已被显式设置。一个简单的'ngrep'显示它总是通过:
application/x-www-form-urlencoded; charset=UTF-8
问题是,CGI :: Lite模块期望只有'application / x-www-form-urlencoded'的精确匹配(即没有charset位)。
将这行代码从精确匹配更改为CGI / Lite.pm中的正则表达式匹配,使得对我有用:
#($content_type eq 'application/x-www-form-urlencoded')) {
($content_type =~ /application\/x-www-form-urlencoded/)) {