jQuery倒计时:serverSync仍然落后于客户端1-2秒

时间:2013-04-20 22:22:55

标签: php ajax sync jquery-countdown

我正在建立拍卖网站,我正在使用Keith Wood的jQuery倒计时来显示拍卖的结束时间。我需要为所有客户提供与服务器同步的倒计时时间。到目前为止,我已经使用serverSync函数实现了jQuery倒计时。它工作正常,但几秒钟过后,倒计时落后1或2秒。 如果可能的话,如何为所有客户完美地同步时间?

更新:我也在轮询(500毫秒间隔)php文件,它会更新所有拍卖(实时效果),在这段代码中我也回应了来自数据库的新“轮询”倒计时(因为当用户在拍卖的最后10秒内出价时,倒数上升+ 10秒)。所以我认为这是问题,因为在客户端,不是每个轮询都在同一时间开始,它取决于客户端刷新页面,因此它会影响倒计时。 基本上我在poll.php中调用的每500毫秒(更新数据库的倒计时):

var syncDate = new Date("'.$formatEndDate.'");  
jq("#defaultCountdown-'.$bidded_id.'").countdown("option", {until: syncDate, serverSync: serverTime});

到目前为止,我的代码落后1或2秒:

$(function () {
   var d = new Date("'.$endingDate.'");             
   $('#defaultCountdown').countdown({until: d,  onExpiry: endAuction, 
     expiryText: '<div class="bid-over">Ended</div>', format: 'HMS', 
     onTick: watchCountdown, serverSync: serverTime });
});

function serverTime() {
var time = null;
var url = "serverTime.php";
jq.ajax({
    url: url,
    async: false,
    dataType: "text",
    success: function (text) {
        time = new Date(text);
    },
    error: function (http, message, exc) {
        time = new Date();

    }
});
return time;
}

serverTime.php:

<?php
//This is how I get server time
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Fri, 1 Jan 2010 00:00:00 GMT"); // Date in the past 
header("Content-Type: text/plain; charset=utf-8"); // MIME type 
date_default_timezone_set('Europe/Ljubljana');
$srvDate = getdate();
$d = $srvDate['mday'];
$m = $srvDate['mon'];
$y = $srvDate['year'];
$h = $srvDate['hours'];
$i = $srvDate['minutes'];
$s = $srvDate['seconds'];
$nowDate=date("$y-$m-$d $h:$i:$s");
$nowDate=str_replace("-","/",$nowDate);
echo $nowDate;
?>

0 个答案:

没有答案