2016-06-17 7 views
1

Es gibt eine Gebots-Website für einige Produkte, und es gibt einen Countdown-Timer, der die verbleibende Zeit in Bezug auf die Serverzeit berechnen sollte.Jquery-Countdown mit synchronem Ajax-Anruf Problem

Im Folgenden ist die jQuery für den Countdown und beachten Sie das Attribut serverSync, die eine AJAX-Funktion namens serverTime() aufruft, um die Serverzeit zu erhalten.

//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; 
} 

Beim Öffnen der Seite mit dem Countdown von verschiedenen PCs funktioniert der Countdown nicht wie erwartet. Wenn ich async: false von der AJAX-Funktionentferne, funktioniert der Countdown gut, aber es zeigt verschiedene Timer auf verschiedenen PCs an, da es die PC-Zeit und nicht die SERVER-Zeit braucht.

Ich brauche eine Lösung dafür.

+1

** Niemals synchrone A (asynchron !!!) JAX-Anfrage verwenden. ** – VisioN

+0

Alternative? – Mohamad

Antwort

0

Ich glaube, Sie suchen die folgende Lösung

//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'); 
    } 
} 

Es gibt zwei Aspekte zu berücksichtigen: Ein Ajax synchron auszuführen erzählt (von Asynchron-Einstellung: false) und die andere zurückkehrt Ergebnis nach der Antwort überprüfen .

Sie haben keinen Typ wie GET oder POST-Methode von Ajax Aufruf erwähnt. Ich habe es mit GET eingestellt, aber Sie haben es auch mit POST versucht.

+0

Ich habe es versucht, aber es hat das Problem nicht gelöst – Mohamad

+0

Haben Sie die response.data Werte überprüft und ist es richtig Wert oder nicht? Die Datei serverTime.php welche Art von Werten zurückgegeben? Ich denke, es gibt kein Timing-Problem für die Antwort wegen jqxhr (Deffer). –

+0

response.date gibt den korrekten Wert zurück. Die serverTime.php enthält folgendes: format ("M j, Y H: i: s O"). "\ N"; ?> – Mohamad