基本上我在这里创建了一个在线排行榜,返回前 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);
}
我试过改变所有的变量,但到目前为止还没有运气。
非常感谢任何帮助