为什么';这个jQuery.post不能与Perl CGI一起工作吗?
我试图找出为什么我没有看到带有$.post(“/url/”,{wtf:2})的params 我正在使用以下perl:为什么';这个jQuery.post不能与Perl CGI一起工作吗?,jquery,perl,cgi,Jquery,Perl,Cgi,我试图找出为什么我没有看到带有$.post(“/url/”,{wtf:2})的params 我正在使用以下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=&
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=>undf})
我错过了什么
Firebug揭示:传输编码是“分块的”,内容类型是“application/x-www-form-urlencoded;charset=UTF-8”。此外,Post选项卡似乎显示了请求中的参数,但CGI没有带来任何乐趣。可能是您的结果既没有返回应用程序/x-www-form-urlencoded,也没有返回多部分/表单数据。有这样的说法: 如果发布的数据不是application/x-www-form-urlencoded或multipart/form data类型,则不会处理发布的数据,而是返回名为POSTDATA的参数中的数据。要检索它,请使用如下代码:
如果您可以访问linux设备,您可以设置“nc”(netcat)在端口80上侦听并查看您接收到的原始请求
不过我怀疑这是服务器端的问题。也许某些Apache配置正在干扰?很抱歉,我帮不上什么忙。我遇到了同样的问题,尽管我使用的是CGI::Lite 结果表明,jquery中的.post函数似乎覆盖了表单的内容类型,即使它是显式设置的。一个简单的“ngrep”显示它总是通过以下方式实现:
application/x-www-form-urlencoded; charset=UTF-8
问题是,CGI::Lite模块只需要“application/x-www-form-urlencoded”(即不带字符集位)的精确匹配
在CGI/Lite.pm中将这一行代码从精确匹配更改为正则表达式匹配,这使我的工作更加顺利:
#($content_type eq 'application/x-www-form-urlencoded')) {
($content_type =~ /application\/x-www-form-urlencoded/)) {
我应该说,我尝试了各种版本的jquery,得到了相同的结果。。。1.1.4、1.2.2和1.3.2.咒语:使用警告比使用严格更重要。我在编写代码时使用警告,但很少在生产代码中使用警告。netcat的想法(我实际上使用了tcpdump)表明,它们应该以参数的形式出现。然后我注意到,我用一个安全功能击中了自己的脚,该功能可以阻止不需要的参数,而这些参数正是我想要的参数。所以基本上我很笨。请停止使用肮脏的旧CGI.pm。改用一个现代化的、干净的web引擎,如或。POSTDATA似乎也是空的。您是在测试映射的结果,还是在测试$cgi->param(“POSTDATA”)本身?如果POSTDATA的值是'a=1&b=2&c=-3',则在查询对象的名称-值对中不会有任何解析。
#($content_type eq 'application/x-www-form-urlencoded')) {
($content_type =~ /application\/x-www-form-urlencoded/)) {