0

AJAXをうまく実行するのに役立ったので、それを使って時計機能を実行するのに問題があります。

時計コード(頭にあります):

<script type="text/javascript">

var ampm = "AM"; //Default
var message="";


function startTime()
{
var today = new Date(); //Number goes here
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
h=checkTime2(h);
document.getElementById('clocktxt').innerHTML=h+":"+m+":"+s+ " " +ampm + " " + message;
//t=setTimeout('startTime()',500);
}

function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
message = "How long you gonna sit there?";
  }
return i;
}

function checkTime2(i)
{
if (i>12)
  {
  i=i-12;
ampm="PM";
  }
return i;
}


//setInterval(startTime,1000);

</script>

AJAXコード(ドキュメントの下部):

<script type='text/javascript'>
function CheckForChange(){
    //alert("<?echo (count($listArray)) . ' and ' . count(file($filename_noformat))?>");
    //if (<?echo count($listArray)?> == <?echo count(explode("\n", $filename_noformat))?>){
        //setInterval("alert('Yup, it is 1')", 5000);

        //alert('Now it is changed');
    //}

    var ajaxReady = new XMLHttpRequest();
    ajaxReady.onreadystatechange = function(){
        if (ajaxReady.readyState == 4){
            //Get the data
            //document.getElementById('clocktxt').innerHTML = ajaxReady.responseText;
            //startTime();
            //alert("here");
            //alert(ajaxReady.responseText);
        }
    }
    ajaxReady.open("GET","ServerTime.php",true);
    ajaxReady.send(null);
}

setInterval(CheckForChange(), 1000);
setInterval(startTime(),1000);
</script>

私がやろうとしているのは、Unixエポックからわずか数ミリ秒のServerTime.phpからの入力を時計に渡すことです。そのため、時計はAJAXによって毎秒更新され、時計関数は新しい開始で実行されます。毎秒の値....私は、時計が呼び出されていないことに気付く前に、時計関数のパラメーターを持っていました。

何が間違っていると思いますか?時計と時計の発信者が2つの異なるスクリプトタグに含まれていることと関係があると思いますが、それを回避する方法を考えることはできません。なんらかの理由で、AJAXパーツを同じスクリプトタグに移動したとき、時計の後に何も起こりません。

Kolinkへ:私はこれを持っています

function getTheNow(){
TIMESTAMP = <?php echo time(); ?>000;
    offset = new Date().getTime()-TIMESTAMP;
    setInterval(function() {
        var now = new Date();
        now.setTime(now.getTime()-offset);
        // print out the time according to the variable `now`
//alert(now);
    },5000);
return now;
}


function startTime()
{
var now = getTheNow;
//alert(now);
var today = new Date(); //Number goes here
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
h=checkTime2(h);
document.getElementById('clocktxt').innerHTML=h+":"+m+":"+s+ " " +ampm + " " + message;
t=setTimeout('startTime()',500);
}

function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
message = "How long you gonna sit there?";
  }
return i;
}

function checkTime2(i)
{
if (i>12)
  {
  i=i-12;
ampm="PM";
  }
return i;
}


setInterval(startTime,1000);
4

2 に答える 2

3

コンピュータの時計は、毎秒再同期しなければならないほど不正確ではありません。10 分ごと、または 1 時間ごとに試してください。

実際、私は同期を完全に廃止しました。これを行う方がはるかに簡単です:

<script type="text/javascript">
    TIMESTAMP = <?php echo time(); ?>000;
    offset = new Date().getTime()-TIMESTAMP;
    setInterval(function() {
        var now = new Date();
        now.setTime(now.getTime()-offset);
        // print out the time according to the variable `now`
    },1000);
</script>
于 2012-05-16T05:32:44.540 に答える
1

JavaScript 101 エラー

setInterval(CheckForChange(), 1000);
setInterval(startTime(),1000);

関数を割り当てているのではなく、それらを呼び出し/実行しており、これらの関数から返されたものを設定する必要があると言っています。() をドロップして、関数を参照するようにします。

setInterval(CheckForChange, 1000);
setInterval(startTime,1000);
于 2012-05-16T05:33:07.253 に答える