鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

JSON文字列をperlで受け取る

ajaxで渡す場合は

javascript側でこんな風に書いてあげればいいんですが・・・

        $.ajax({
        url: '/route',
        type: 'POST',
        contentType: 'application/json',
        data: to_json(path),
        dataType: 'json'
        })

普通にajaxでなくてPOSTで渡す方法でうまくサーバサイドでうけとらない。

クライアント側のコードは

submitの後に、javascriptの関数を呼んで hiddenのdata値の値にjson文字列を入れるようにしています。 IEのキャプチャ(F12キーを押して、ネットワークタブを選ぶ) に出力されている内容は以下のようでした。

data=%7B%22distance%22+%3A+0.112%2C%22path%22+%3A+%22LINESTRING%2835.691016648420515+139.75249886512756%2C35.691030000000005+139.75252%2C35.690200000000004+139.75317%29%22%7D&course_name=mmmmm&course_type=1&=

半角スペース部分が+に置換されているようです。

サーバー側(Mojolicious)のコードは

my $data = $self->req->param("data");       
$data =~ tr/+/ /;
$data = uri_unescape( $data);       
my $hash = decode_json $data;

こちらに を参照。

どうも、uri_unescapeでは、+は+のままになってしまう模様。 だから、trで+を半角スペースに置換してあげました、いうお話でした。