我正在建立拍卖网站,我正在使用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;
?>