AJAX结果可能不同步并导致轮询结果出现差异吗?

时间:2012-05-14 14:38:39

标签: php ajax settimeout

我正在开发类似于拍卖的功能,使用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人。

欢迎任何意见/建议,谢谢!

1 个答案:

答案 0 :(得分:1)

我认为这正是你的问题。由于请求是异步的,因此无法控制它们的执行顺序。您必须同步您的请求并避免多个请求,即如果没有待处理请求,您只能执行新请求,否则您无法控制何时触发每个请求的回调。