JSON

postURL関数を使ってJSONを送る

postURL*1を使ってデータを送信する場合、データに名前を付けて送信することが出来ない。そこでデータをJSONの文字列として送り、サーバー側で配列に直すことを考える。JSONについては参考資料1に詳しい。

JSONを文字列に直す

JavaScriptJSONを文字列に直すには参考資料1のサイトで配布されているjson.jsを使用するのが簡単でいい。以下の様にしてJSONを文字列に直すことが出来る。ただし日本語は使用すると文字化けが発生する。

var requestData = [
	{
		"fontName":"msp_gothic",
		"unicode":["87","101","98","12392","25991","23383"],
	},
	{
		"fontName":"ms_gothic",
		"unicode":["87","101","98","12392","25991","23383"],
	}
]

var myJSONText = requestData.toJSONString();
/*(実際には改行はない)
[{"fontName":"msp_gothic","unicode":["87","101","98","12392","25991","23383"]},
{"fontName":"ms_gothic","unicode":["87","101","98","12392","25991","23383"]}]
*/

JSONを配列に直す

JSON文字列をJSONに戻すライブラリは多数の言語で提供されている。*2ここではPHPJsphonというライブラリを使ってJSON文字列をJSONに戻してみる。Jsphonは参考資料2のサイトで公開されている。

<?
require_once('Jsphon.php');

/* ------- エンコード ------- */
$json = $HTTP_RAW_POST_DATA;
try {
    $json = Jsphon::decode($json);
} catch (Jsphon_Exception $e) {
    die($e->getMessage());
}

echo $json[0]['unicode'][0];
//87
?>

*1:postURLについては2007-09-09の記事を参照のこと

*2:参考資料1の一番下を見ること

postURLについての追記

2007-09-09の記事でjavascriptの通信用関数が2つあること-getURLに対してpostURLがあること-を書いた。そのpostURLを使う上で注意すべきことを書く。

送信するデータについて

postURL関数の第2引数に入れられたデータはそのままサーバーにpostされる。すなわちdata1=xxx&data2=yyyといった文字列はdata1=xxx&data2=yyyのまま受け取られる。

phpでデータを受信する

phpでpostされたデータを取得する際、通常は$_POST['elementname']といった方法を使う。しかしpostURLから送信されたデータは$HTTP_RAW_POST_DATAに格納されている。

参考資料

  1. Dynamically updating SVG based on serverside information.