1

サーバー側からクライアント側にハッシュを渡す必要があります。フロントエンドとバックエンドでそれぞれ jquery と perl CGI::Application を使用しています。私は jquery の使用に関して初心者なので、サーバーhttp://jquery.malsup.com/form/#jsonから返された JSON データを処理する方法を示す jquery フォーム プラグインの例を変更しました。与えられたコードをお気に入りの 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::JSONjson_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ハッシュのハッシュや配列の配列などの複雑なデータ構造での使用に関するアドバイスは、将来必要になるので大歓迎です。

4

2 に答える 2

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。:)

于 2011-07-07T20:13:06.657 に答える
0

CGI::APPのreturnメソッドを理解していないと思います。実行モードごとに1回だけ戻ることができます。

于 2011-07-07T08:23:18.800 に答える