基本的に、私はここでトップ100のユーザースコアを返すオンラインリーダーボアを作成しました
ユーザーが更新を押してランクが変更された場合、新しい位置が表示されます。私がやりたいのは、AJAX、jQuery、JSONを使用して、ページを更新せずにランクを更新することです。
リーダーボードは、連想SQLクエリを介して入力され、SQL変数に格納されます。ここで使用して、JSON形式で出力を取得することができました。
//Shows user details and the current top 100 ranks
while ($row = mysql_fetch_assoc($result)) {
print json_encode ($row);
}
これまでのところ、[Tinysort][3]のこのアニメーションによる並べ替えの例を使用しています。
function sort() {
var $Ul = $('ul#leaderboard');
$Ul.css({position:'relative',height:$Ul.height(),display:'block'});
var iLnH;
var $Li = $('ul#leaderboard>li');
$Li.each(function(i,el){
var iY = $(el).position().top;
$.data(el,'h',iY);
if (i===1) iLnH = iY;
});
$Li.tsort('h1:eq(0)',{order:'desc'}).each(function(i,el){
var $El = $(el);
var iFr = $.data(el,'h');
var iTo = i*iLnH;
$El.css({position:'absolute',top:iFr}).animate({top:iTo},500);
});
}
私はほとんどそこにいると思いますが、以下のpoll()関数で立ち往生しています
poll();
function poll() {
$.ajax({
url: 'http://test.bmx-tube.com/ajax.php', // needs to return a JSON array of items having the following properties: id, score, facebook_id, username
dataType: 'json',
success: function(o) {
for(i=0;i<o.length;i++) {
if ($('#row-'+o[i].player_id).length == 0) {
// this id doesn't exist, so add it to our list.
$("#leaderboard").append('<li><h1 style="display:inline" player_id="row-' + o[i].player_id + '">' + o[i].score + '</h1> <img style="height:50px" src="http://graph.facebook.com/' + o[i].facebook_id + '/picture"/> ' + o[i].name + '</li>');
} else {
// this id does exist, so update 'score' count in the h1 tag in the list item.
$('#row-'+o[i].player_id).html(o[i].score);
}
}
sort();
},
});
// play it again, sam
var t = setTimeout(poll,3000);
}
私は周りのすべての変数を変更しようとしましたが、今のところ運がありません。
どんな助けでも大歓迎