2009-02-24 87 views
3

我想弄清楚为什么我没有看到$ .post(“/ url /”,{wtf:2})的参数。为什么jQuery.post不支持Perl CGI?

我使用这个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") }); 

当我发出了一个$获得( “/ URL”,{跆拳道:2}),我得到的结果,我希望找到 跆拳道是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

我应该说,我已经使用jQuery的各种版本,并尝试得到相同的结果... 1.1.4,1.2.2和1.3.2。 – jettero 2009-02-24 21:47:01

+0

口头禅:使用警告比使用严格更重要。 – ysth 2009-02-25 03:11:52

回答

2

如果你有可以访问的Linux框,您可以设置“NC”(的netcat)为侦听端口80,看到了生你的请求正在接受。

虽然我怀疑这是服务器端问题。也许一些Apache配置干扰?对不起,我无法提供更多帮助。

4

可能是因为你的结果没有返回应用程序/ x-www-form-urlencoded和multipart/form-data。 CGI doc有这样说一下:

如果发布数据是不是类型的应用/ X WWW的窗体-urlencoded或多部分/格式数据,则发布数据将不被处理,而是被返回原样位于名为POSTDATA的参数中。为了找回它,使用这样的代码:

my $data = $query->param('POSTDATA'); 
1

我有同样的问题,但我使用CGI :: Lite代替。

原来,jQuery中的.post函数似乎覆盖了表单的内容类型,即使它已被明确设置。一个简单的“的ngrep”表明它总是通过来作为:

application/x-www-form-urlencoded; charset=UTF-8 

问题是,在CGI ::精简版模块在等一个精确匹配只有“应用程序/ x-WWW窗体-urlencoded”(即没有charset位)。

从完全匹配到CGI正则表达式匹配更改此行代码/ Lite.pm做的事情为我工作:

#($content_type eq 'application/x-www-form-urlencoded')) { 
($content_type =~ /application\/x-www-form-urlencoded/)) {