2017-03-02 14 views
-1

以下のスクリプトは、最後の顧客が分と秒で登録されてからの時間を返します。登録日の変数は、別のPHPファイルから取得されます。JS変数(AJAX)からのJSカウントダウンタイマー

新しい顧客登録時に2つを組み合わせて動的結果(AJAX)を取得する方法。

以下のスクリプトは正常に動作しますが、リロード時にのみ更新されます。 jQueryを使って

のindex.php

<?php 
    require_once('get_file.php') 
?> 

<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script> 

<script type="text/javascript"> 
var currenttime = <?php print json_encode($todaysDate, JSON_UNESCAPED_SLASHES) ?>; 
var lastsale = <?php print json_encode($orderCreated, JSON_UNESCAPED_SLASHES) ?>; 

var montharray=new Array("01","02","03","04","05","06","07","08","09","10","11","12") 
var serverdate=new Date(currenttime) 
var lastordercreated=new Date(lastsale) 

function padlength(what){ 
    var output=(what.toString().length==1)? "0"+what : what 
    return output 
} 

function displaytime(){ 
    serverdate.setSeconds(serverdate.getSeconds()+1) 

    // Todays Date 
    var datestring=padlength(serverdate.getDate())+"/"+montharray[serverdate.getMonth()]+"/"+serverdate.getFullYear() 

    // Current Time 
    var timestring=padlength(serverdate.getHours())+":"+padlength(serverdate.getMinutes())+":"+padlength(serverdate.getSeconds()) 

    // Last Ordered Count 
    var lastorderedcount=padlength(serverdate.getTime()) - padlength(lastordercreated.getTime()) 

    var minutes = Math.floor((lastorderedcount % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((lastorderedcount % (1000 * 60))/1000); 
    var lastordercountdown = minutes+":"+seconds 

    // Output 
    document.getElementById("todaysdate").innerHTML=datestring 
    document.getElementById("currenttime").innerHTML=timestring 
    document.getElementById("lastordered").innerHTML=lastordercountdown 

} 

function updateAjax() { 
    $.ajax({ 
     url: 'getLastData.php', 
     success: function(res) { 
      currenttime   = res.currentDate; 
      lastsale   = res.orderCreated; 
      serverdate   = new Date(currenttime); 
      lastordercreated = new Date(lastsale); 
      console.log(res); 
     } 
    }); 
} 

window.onload=function(){ 
setInterval('displaytime()', 1000) 
setInterval(updateAjax, 1000) 
} 
</script> 

<span id="lastordercountdown"></span> 

getLastData.php

<?php 
    require_once('get_data.php'); 

    print json_encode([ 
     'currentDate' => $todaysDate, 
     'orderCreated' => $orderCreated 
    ],JSON_UNESCAPED_SLASHES); 
?> 
+0

あなたは生のAJAX要求を行う方法を求めていますか?今のところ、AJAXはどこにも見当たりません。ライブラリの助けを借りずにこれをやっているのですか、あるいはjQueryを使うことができますか? – FrankerZ

+0

この[タグ:ajax]または[タグ:jquery]はどのように関連していますか?あなたはPHPで整数をプリントアウトし、毎秒javascriptで日付形式をインクリメントします。 – Xorifelse

+0

jQueryが引き出されていますが、AJAXの使用経験はありません。 id要素が動的に更新される限り、任意のlibを含めることができます。 – damek132

答えて

1

、あなたはこのような何か行うことができます:

getLastCustomer.php:

を0

あなたの主なスクリプト:

<script type="text/javascript"> 

var currenttime = '<?php print (json_encode($todaysDate)) ?>' 
var lastregistered = <?php print (json_encode($lastRegistered)) ?> 

var montharray=new Array("01","02","03","04","05","06","07","08","09","10","11","12") 
var serverdate=new Date(currenttime) 
var registrationdate=new Date(lastregistered) 

function padlength(what){ 
    var output=(what.toString().length==1)? "0"+what : what 
    return output 
} 

function displaytime(){ 
    serverdate.setSeconds(serverdate.getSeconds()+1) 


    // Last Registration Countdown 
    var lastregcount=padlength(serverdate.getTime()) - padlength(registrationdate.getTime()) 

    var minutes = Math.floor((lastregcount % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((lastregcount % (1000 * 60))/1000); 
    var lastregcountdown = minutes+":"+seconds 

    document.getElementById("registrationcount").innerHTML=lastregcountdown 

} 

function updateAjax() { 
    $.ajax({ 
     url: 'getLastCustomer.php', 
     dataType: 'json', 
     success: function(res) { 
      currenttime  = res.currentDate; 
      lastregistered = res.lastRegistered; 
      serverdate  = new Date(currenttime); 
      registrationdate = new Date(lastregistered) 
     } 
    }); 
}   

window.onload=function(){ 
    setInterval(displaytime, 1000) 
    setInterval(updateAjax, 30 * 1000) 
} 
</script> 
+0

無効な書式の日付が次のようになっているため、これが欠落していますか?NaN/undefined/NaN – damek132

+0

成功関数に 'console.log'を追加し、サーバーから何が返されているかを確認します。正しい日時が設定されていますか? – FrankerZ

+0

JSONの出力は{"currentDate": "03/03/2017 13:01:33"} {"lastRegistered": "03/03/2017 13:00:58"}であり、ファイルはうまくリロードされます。 – damek132