为什么这个jQuery.post不能与Perl CGI一起使用?

时间:2009-02-24 21:32:09

标签: jquery perl cgi

我正在试图找出为什么我没有看到$ .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的欢乐。

3 个答案:

答案 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/)) {