私は PHP バックエンドを持っています。クエリを実行すると、一連の投稿が JSON で返されます。でも、投稿が複数あるので配列にしています。例: (先頭の文字列は単なる JSONP コールバックです)
jQuery19107630979726091027_1365800375610?_=1365800375611([
{
"content": "Hello",
"time": "1349829544",
"info": {
"email": "test@test.com",
"username": "test",
"first": "Test",
"last": "User",
"id": "2"
}
},
{
"content": "test.",
"time": "1349829535",
"info": {
"email": "test@test.com",
"username": "test",
"first": "Test",
"last": "User",
"id": "2"
}
}
])
JSON が括弧で囲まれていることに注意してください。jQuery スクリプトを使用してこのデータを呼び出して解析すると、「Uncaught SyntaxError: Unexpected end of input」というエラーが表示され、ブラケットがあるデータの最後の行を示します。JS:
$("#getPosts").click(function(){
$.getJSON("http://mysite.com/api/posts/list/byfriends/callback=?", function(data){
$.each(data, function(){
$('#posts').append("<li><p>"+this.content+"</br>By: "+this.info.first+" "+this.info.last+" ("+this.info.email+")");
});
});
});
最後に、JSON を送信する PHP を次に示します。
include('config.inc');
header("Content-type: text/javascript");
$posts = array();
$subscribe = "SELECT subscribed FROM subscribe WHERE subscriber = '{$_SESSION['id']}'";
$query = mysql_query("SELECT * FROM `posts` WHERE (`post_owner` IN ({$subscribe}) OR `post_owner` = {$_SESSION['id']}) ORDER BY `id` DESC");
$num = mysql_numrows($query);
for ($i = 0; $i < $num; $i++) {
$post['content'] = mysql_result($query, $i, 'content');
$post['time'] = mysql_result($query, $i, 'timestamp');
$post['info'] = getInfo_other(mysql_result($query, $i, 'post_owner'));
array_push($posts, $post);
}
echo $callback."("json_encode($posts, JSON_PRETTY_PRINT).")";
コールバック変数が機能しています。それを処理する単純な PHP ルーターのセットアップがあります。