jQueryを使ってPHPとJSON形式のデータをやり取りする方法
クライアントとサーバー間で通信するときにJSON形式のデータを簡単にやり取り出来ないものかと調査したメモ。
クライアント(JavaScript側)はjQueryとjQueryのプラグイン「jquery-json」を使う。ダウンロードはこちらから。
jquery-jsonはjson形式の変換(encode, decode)を簡単にできる。
サーバー側はjson_decodeとjson_encodeを使う。詳しくは前の記事を参照。
以下サンプル
クライアント側
var objData = new Object(); //var aData = {};でもOK
objData.name = "hoge"; //aData["name"] = "hoge"でもoK
objData.age = 12;
sJson = $.toJSON(objData);
$.getJSON("test.php", { json : sJson },
function(objRes){
alert(objRes.country); //objRes["country"]でもok
});
(jquery-jsonを使わない場合はobjDataをpostする)
ちなみに$.post()を使って、$.evalJSON(res)してもいい。
サーバー側(test.php)
$objParam = json_decode($_POST['json']); $objParam->country = 'japan'; //注意:配列ではない echo json_encode($objParam);
試してないけど、こんな感じでできるはず。
POSTするとサーバー側のデバッグがしづらいので、サーバーにポストする前にalertでJSONを出力して次のようなHTMLを用意すれば、ちょっとやりやすくなる。
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>保存するときの文字コードを気を付ける</title>
</head>
<body>
<form method="POST" action="test.php">
<input type="text" name="json" value='ここにsJsonを貼り付ける'/>
<input type="submit"/>
</form>
</body>
</html>文字コード(charset)はファイルの文字コードと合わせないと日本語が文字化けする。
<2010/01/25 追記>
magic_quotes_gpcがOnの場合はエスケープされてしまうので、Offにするかプログラム側で
if (get_magic_quotes_gpc()) {
$json = stripslashes($json);
}
して実行する。
▼関連記事