Передача хеша из Perl CGI :: Application :: Plugin :: JSON в плагин формы jquery - PullRequest
1 голос
/ 07 июля 2011

Мне нужно передать хэш со стороны сервера на сторону клиента.Я использую JQuery и Perl CGI :: Application соответственно на переднем и заднем плане.Я начинаю, когда дело доходит до использования jquery, поэтому я изменил пример плагина формы jquery, который показывает, как обрабатывать JSON-данные, возвращаемые с сервера http://jquery.malsup.com/form/#json. Я пытался использовать данный код с моей любимой веб-инфраструктурой perlCGI :: 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: <a href="http://localhost/echo.html" rel="nofollow">http://localhost/echo.html</a>

При передаче скаляра я использую функцию CGI :: Application :: Plugin :: JSON json_body.Пожалуйста, дайте мне знать, где я иду не так.Ниже приведен код Jquery в html-файле, который также указан на сайте плагина формы (ссылка приведена выше):

// 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 ]

1 голос
/ 08 июля 2011

Вот возможное решение.

вам понадобится только библиотека 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;

(Как указывал Рауль, вы не можете вернуться более одного раза в блок CGI :: App.)

ПРИМЕЧАНИЕ: я не использую CGI :: Application :: Plugin :: JSON , потому что он мне просто не нужен. Таким образом, я достиг того же результата. Конечно, TMTOWTDI. :)

0 голосов
/ 07 июля 2011

Не думаю, что вы понимаете метод возврата CGI :: APP. Вы можете вернуться только один раз за режим.

...