2012-10-20 62 views
1

與jQuery我嘗試後的標準對象採用Perl CGI腳本jQuery的崗位目標和Perl CGI

JS VAR數據:

{ 
alias: ["a1","a2","a3"], 
ip: "127.0.0.1", 
name: "name", 
port: "80", 
} 

JS jQuery的崗位:

`$.post('/vhosts.cgi',{action: 'save',data: data);` 

的Perl:

my $q = CGI->new; 
print Dumper($q->param('data')); 

導致轉儲呃是空的; $ Q的信息顯示錶明PARAM名稱data[ip],data[name]等,

自卸車($ Q):

$VAR1 = bless({ 
      '.parameters' => [ 
           'action', 
           'data[name]', 
           'data[ip]', 
           'data[port]', 
           'data[alias][]' 
           ], 
      'data[alias][]' => [ 
            'a1', 
            'a2', 
            'a3' 
           ], 
      '.charset' => 'ISO-8859-1', 
      'data[ip]' => [ 
          '127.0.0.1' 
          ], 
      'data[port]' => [ 
           '80' 
          ], 
      'action' => [ 
          'savevhost' 
         ], 
      'data[name]' => [ 
           'name' 
          ], 
      '.fieldnames' => {}, 
      'escape' => 1 
      }, 'CGI'); 

我怎樣才能得到data Perl中的對象或哈希?

+0

顯示'$ q'對象的確切輸出。 – TLP

+0

檢查編輯的問題 –

+0

該輸出顯示參數不在''data''參數中,而是'param('data [name]')'等等。您應該嘗試找到更適合的模塊爲jquery。 – TLP

回答

2

如果你不想寫data[...]狀結構自己的解析器效用和使用Unicode的問題混亂等等,你最好使用JSON編碼/解碼:

客戶端:

$.post('/vhosts.cgi',{action: 'save',data: JSON.stringify(data, null, 2)); 

服務器端:

use CGI; 
use JSON; 
use Data::Dumper; 

my $q = CGI->new; 
my $data = decode_json($q->param('data')); 

print Dumper $data; 

我不認爲這是很難的方式。

+0

我只是一樣:)只是想知道爲什麼perl-cgi不是這樣的 –

+0

它不是CGI.pm,它是jQuery,它以特定的方式序列化JS對象: 轉到Chrome控制檯,嘗試使用'$ .post (「/ foo」,{data:{別名:[「a1」,「a2」,「a3」],ip:「127.0.0.1」,name:「name」,port:「80」,}}); ' 然後轉到網絡選項卡,查看實際發送到服務器的內容。 – yko

+0

但PHP獲取此,所以它不是jQuery的唯一方式來序列化數據 –