将perl CGI :: Application :: Plugin :: JSON中的哈希传递给jquery表单插件

时间:2011-07-07 08:19:22

标签: perl json cgi-application

我需要将哈希从服务器端传递到客户端。我分别在前端和后端使用jquery和perl CGI :: Application。在使用jquery时我是首发,因此我修改了jquery表单插件示例,该示例演示了如何处理从服务器http://jquery.malsup.com/form/#json返回的JSON数据。我试着用我最喜欢的perl web框架CGI :: Application来使用给定的代码。 CGI::Application::Plugin::JSON在传递标量值时运行良好,但由于缺少文档,我无法弄清楚如何传递数组或散列,或者复杂的数据结构。传递哈希时,我使用以下代码片段: -

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的建议,如散列哈希值和数组数组都是非常受欢迎的,因为我将来需要它。

2 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案。

您只需要JSON库,您可以在代码中执行以下操作:

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;

(正如Raoul指出的那样,你不能在CGI :: App块中多次返回。)

注意:我不使用CGI::Application::Plugin::JSON,因为我根本不需要它。这样我获得了相同的结果。当然,TMTOWTDI。 :)

答案 1 :(得分:0)

我认为您不了解CGI :: APP返回方法。每个runmode只能返回一次。