2011-07-07 41 views
1

我需要將哈希從服務器端傳遞到客戶端。我在前端和後端分別使用jquery和perl CGI :: Application。我是使用jQuery的初學者,因此我修改了jquery表單插件示例,其中顯示瞭如何處理從服務器http://jquery.malsup.com/form/#json返回的JSON數據。我試圖用我最喜歡的perl web框架CGI :: Application來使用給定的代碼。 CGI::Application::Plugin::JSON在傳遞標量值時工作良好,但由於缺少文檔,我無法弄清楚如何傳遞數組或哈希或複雜的數據結構。當傳遞一個哈希我使用下面的代碼片段: -從perl CGI :: Application :: Plugin :: JSON傳遞哈希到jQuery表單插件

foreach my $k (sort keys %hash) 
{ 
return $self->add_json_header ({ message => $hash{$k}}); 
} 

這是我在Apache的錯誤日誌中發現了錯誤:

ajaxtest.pl: Odd number of elements in hash assignment at /usr/local/share/perl/5.10.0/CGI/Application/Plugin/JSON.pm line 98., referer: http://localhost/echo.html

雖然經過我使用CGI標: :Application :: Plugin :: JSON json_body函數。 請讓我知道我要去哪裏錯了。以下是在HTML文件中的jQuery代碼是在表單插件網站(上面給出的鏈接)也給出了:

// prepare the form when the DOM is ready 
$(document).ready(function() { 
// bind form using ajaxForm 
$('#jsonForm').ajaxForm({ 
// dataType identifies the expected content type of the server response 
dataType: 'json', 

// success identifies the function to invoke when the server response 
// has been received 
success: processJson 
}); 
}); 

function processJson(data) { 
// 'data' is the json object returned from the server 
alert(data.message); 
} 

使用CGI::Application::Plugin::JSON複雜數據結構的任何建議喜歡陣列的哈希散列和數組是最歡迎,因爲我將來需要它。

回答

1

這是一個可能的解決方案。

你只需要JSON庫,並在你的代碼,你可以做到以下幾點:(由於拉烏爾指出的那樣,你不能返回不止一次在CGI ::應用程序塊)

my %data_struct = { a => 1, b => 2 }; 
my $json = to_json(\%data_struct, {utf8 => 1}); 
$json =~ s/"(\d+?)"/$1/g; # to_json puts quotes around numbers, we take them off 

# here $self is the CGI::App object, it's probably called like that 
$self->header_add(-type => 'application/json'); 

return $json; 

注:我不使用CGI::Application::Plugin::JSON,因爲我只是不需要它。這樣我達到了同樣的結果。當然,TMTOWTDI。 :)

0

我不認爲你理解CGI :: APP返回方法。每個runmode只能返回一次。