我正在开发类似于拍卖的功能,使用jQuery,AJAX,PHP和mySQL。
Ajax每秒访问服务器以获得最新的出价,在此调用期间,我们还从服务器获取剩余时间以使所有参与者保持同步。
我有两个问题:
1)偶尔剩余的时间会闪回前一段时间的值,只需几分之一秒。这可能与异步结果不同步有关吗?
相关代码的片段:
function dotimer() {
updateScreen();
setTimeout('dotimer()',1000);
}
function updateScreen(){
$.ajax({
type : 'POST',
url : 'getinfo.php',
dataType : 'json',
data: { /* various params are passed to php */ },
success : function(data){
/* other info processed here...*/
$("#countdowntimer").html(data.secondsremaining);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {}
});
}
getinfo.php:
$return['secondsremaining'] = strtotime($end_time)-strtotime("now");
/* get other infor from database... */
echo json_encode($return);
(setTimeout和setInterval都有相同的结果。)
2)每秒访问数据库是否过多?我看不到确保信息是最新的替代方案。有一个更好的方法吗? 拍卖的时间相对较短(30分钟),我们预计不会超过10人。
欢迎任何意见/建议,谢谢!
答案 0 :(得分:1)
我认为这正是你的问题。由于请求是异步的,因此无法控制它们的执行顺序。您必须同步您的请求并避免多个请求,即如果没有待处理请求,您只能执行新请求,否则您无法控制何时触发每个请求的回调。