2009-02-24 65 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/)) { 
相關問題