我正在建立拍卖网站,我正在使用Keith Wood的 jQuery 倒计时来显示拍卖的结束时间。我需要为我的所有客户与服务器同步倒计时时间。到目前为止,我已经用serverSync
函数实现了 jQuery 倒计时。它工作正常,但是当几秒钟过去后,倒计时滞后 1 或 2 秒。
如果可能的话,我怎样才能完美地同步所有客户的时间?
更新:我还在轮询(500 毫秒间隔)php 文件,它更新所有拍卖(实时效果),在这段代码中,我还从数据库中回显了新的“轮询”倒计时(因为当用户在拍卖的最后 10 秒内出价时,倒计时增加 + 10 秒)。所以我认为这是问题所在,因为在客户端,并非每次轮询都同时开始,这取决于客户端何时刷新页面等等,它会影响倒计时。基本上每 500 毫秒我在 poll.php 中调用一次(它会更新数据库中的倒计时):
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;
?>