Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';这个jQuery.post不能与Perl CGI一起工作吗?_Jquery_Perl_Cgi - Fatal编程技术网

为什么';这个jQuery.post不能与Perl CGI一起工作吗?

为什么';这个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=&

我试图找出为什么我没有看到带有$.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=>$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/)) {