2016-06-17 5 views
1

一部の製品には入札サイトがあり、サーバー時間に関する残りの時間を計算するカウントダウンタイマーがあります。同期Ajaxコールの問題を伴うJqueryのカウントダウン

次はカウントダウンのjQueryで、サーバー時間を取得するためにserverTime()というajax関数を呼び出すserverSyncという属性に注目してください。異なるPCからのカウントダウンでページを開くと、予想通り

//Countdown Jquery 
$(".anything").countdown("change", { 
    until: $.countdown.UTCDate(0, year, month, day, hours, minutes, seconds, 0), 
    format:"dHMS", 
    serverSync: serverTime 
}); 

//The ajax function that is being called by the countdown script 
function serverTime() { 
    var time = null; 
    $.ajax({ 
     url: "serverTime.php", 
     async: false, 
     dataType: "text", 
     success: function(text) { 
      time = new Date(text); 
     }, error: function(http, message, exc) { 
      time = new Date(); 
     } 
    }); 
    return time; 
} 

、カウントダウンは動作を停止します。 AJAXの機能serverTime()からasync: falseを削除すると、カウントダウンはうまくいきますが、異なるPC上では異なるタイマーが表示されます。なぜなら、それはPC時間であり、SERVER時間ではないからです。

解決策が必要です。

+1

**同期A(非同期!!!)JAXリクエストを絶対に使用しないでください** ** – VisioN

+0

代替手段はありますか? – Mohamad

答えて

0

は、私が考えるには、2つの側面がありますが、以下ソリューション

//Countdown Jquery 
$(".anything").countdown("change", { 
    until: $.countdown.UTCDate(0, year, month, day, hours, minutes, seconds, 0), 
    format:"dHMS", 
    serverSync: serverTime 
}); 

//The ajax function that is being called by the countdown script 
function serverTime() {   
    var jqxhr = $.ajax({ 
     url: "serverTime.php", 
     async: false, 
     dataType: "text", 
     type: "GET", // or "POST" 
    }); 

    // 'async' has to be 'false' for this to work 
    var response = {valid: jqxhr.statusText, data: jqxhr.responseText}; 

    if (response.valid == 'OK') 
    { 
     return new Date(response.data); 
    } 
    else 
    { 
     alert('not valid'); 
    } 
} 

を探していると思う:と他の結果は後の応答を確認し返している:一つは、Ajaxが(偽非同期を設定することで)同期を実行するように指示されます。

あなたは、AJAX呼び出しのGETメソッドまたはPOSTメソッドのような型は記述していません。私はGETを呼び出すことによってそれを設定しましたが、あなたもPOSTで試しました。

+0

私は試しましたが、問題を解決しませんでした – Mohamad

+0

response.dataの値をチェックしましたか?正しい値かどうか?どのタイプの値が返されるserverTime.phpファイル?私はjqxhr(deffer)のために応答を得るためのタイミング問題はないと思う。 –

+0

response.date正しい値を返します。 serverTime.phpには、以下が含まれています。<?php $ now = new DateTime(); echo $ now-> format( "M j、Y H:i:s O")。 "\ n"; ?> – Mohamad