0

PHP と jQuery/JavaScript を使用して、PHP カート タイマー スクリプトに取り組んでいます。

PHPの現在のタイムスタンプを取得するために、set-interval関数を毎秒繰り返しています。

最初の製品がカートに追加されると、タイマーが停止する前にタイマーが開始され、ユーザーが続行するかキャンセルするかをユーザーに促します。

私のコードは次のとおりです

$(document).ready(function(){
    var orderedtime = "echo $_SESSION['ordertime'];";
    if (orderedtime === null || orderedtime == ''){
       console.log("orderedtime is not set");
    }
    else{
       init();
   }
});
var currenttime;
var alerttime;
var extratime;
function cd(){
    alerttime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (1 * 60)));  ?>"
    extratime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (2 * 60)));  ?>";
    redo();
}
function redo(){
    currenttime = "<?php echo date('h:i:s', time()); ?>";
    if(alerttime == currenttime) {
        //doing something   
    }
    else if(currenttime == extratime){
        //doing something
    }
    else{
        cd = setTimeout("redo()",1000);
    }
}
function init(){
    cd();
}

最初の反復値のみを格納する currenttime 変数が更新されていません。

この問題を解決するには?

それを解決するために親切に助けてください。

前もって感謝します。

4

2 に答える 2

0

MikeW の素晴らしいが不完全な回答に加えて、サーバーから時間を要求し、それを DOM で受け取る方法が必要です。

それを行う唯一の方法があります: AJAX です。

Mike が指摘したように、上で入力した PHP コードは、ページが最初に生成されたときに 1 回だけ実行されます。ページが生成され、ドキュメントが「準備完了」になったら、AJAX を使用する必要があります。

以下は、これが機能する 1 つの方法を示す、完全に機能するコピー/貼り付け可能な例です。

orderedtimeどのように/いつ設定するかわからないため、変数をオーバーライドする必要があったことに注意してください。

HTML/javascript 側: index.php

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />

        <style>
            #timeDiv{width:40%;height:200px;background:wheat;padding:10px;}
        </style>

        <script type="text/javascript">
            $(document).ready(function() {
                //var orderedtime = "<?php echo $_SESSION['ordertime']; ?>";
                var orderedtime = '';
                if (orderedtime === null || orderedtime == ''){
                   console.log("orderedtime is not set");
                }else{
                    doAjax();
                }

                window.setInterval(function(){
                    doAjax();
                },2000);

            }); //END document.ready

            function doAjax() {
                $.ajax({
                    type: "POST",
                    url: "get_the_time.php",
                    data: "ordertime=" + orderedtime,
                    success: function(myData) {
                        $('#thetime').html(myData);
                    }
                });
            }

        </script>
    </head>

<body>

    <div id="timeDiv">
        The time is: <span id="thetime"></span>
    </div>

</body>

</html>

PHP 側: get_the_time.php

<?php

if (isset($_POST['ordertime']) != true) {

    $d = date("h:i:s");

}else{

    $ot = $_POST['ordertime'];
    $d = date('h:i:s', (strtotime($ot) + (1 * 60)));

}

echo $d;

重要な注意点:

AJAX を使用する場合、サーバーから送信された応答はsuccess:関数内で受信され、他の場所では受信されません。

後でそのデータを使用する場合、success 関数内の変数に割り当てても機能しません。私が見つけた最良の方法は、受信したデータを何らかの要素に貼り付け (非表示の入力フィールドはこれに最適です)、必要なときにそこから取得することです。

例えば:

<input type="hidden" id="myHiddenField" />

$.ajax({
    type: "POST",
    url: "get_the_time.php",
    data: "ordertime=" + orderedtime,
    success: function(myData) {
        $('#thetime').html(myData);
        $('#myHiddenField').val(myData);
    }
});

次に、他の JavaScript 関数内で、そのデータを取得して変数に割り当てることができます。

var someVar = $('#myHiddenField').val();

これが遅れていることを願っています。


This stackoverflow postAJAXに関する詳細情報/説明があります。下部にある単純化された AJAX の例を確認してください。

于 2013-09-12T21:16:48.243 に答える