IEQ Обратный отсчет обновления IE проблема - PullRequest
0 голосов
/ 27 июля 2011

Я использую плагин обратного отсчета jQuery (http://keith -wood.name / countdownRef.html) и использую функцию serverTime:

function serverTime() {
    var time = null; 
    $.ajax({url: 'cgi/server-time.php', 
    async: false, dataType: 'text', 
    success: function(text) { 
        time = new Date(text); 
    }, error: function(http, message, exc) { 
        time = new Date();
    }}); 
    return time; 
 }

Теперь, когда я нажимаю «Обновить», Firefox корректен, однако IE сбрасывает часы на установленное время, которое совершенно неверно, т.е. Firefox сообщает, что осталось 44 минуты, IE говорит, что остается 1 час, 36 минут.

Если я установил async в true, то он использует локальное машинное время, которое также может быть неправильным.

Сервер-time.php

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Fri, 1 Jan 2010 00:00:00 GMT"); // Date in the past 
$now = new DateTime(); 
echo $now->format("M j, Y H:i:s O")."\n"; 

1 Ответ

1 голос
/ 27 июля 2011

Вы не можете вернуть время из этой функции, если async имеет значение true. Вызов ajax является асинхронным. Он НЕ завершил вызов ajax, когда возвращается функция serverTime. Если вы хотите использовать возвращаемое время, вы должны вызвать функцию, которая будет использовать его, из функции успеха. Это очень распространенная ошибка - я, вероятно, писал об этом 10-15 раз за последние пару недель.

Если async имеет значение false, это должно работать, если браузер не кеширует ваш php-файл, хотя ваша страница будет блокироваться во время вызова ajax до тех пор, пока не вернется.

Если вы хотите на 100% убедиться, что ваш ajax-вызов никогда не вернет кэшированный результат, добавьте к нему случайную строку запроса, например, так, чтобы это всегда был уникальный URL:

cgi/server-time.php?random=83987569284

Вы можете создать случайное число следующим образом:

var php = "cgi/server-time.php?random=" + Math.floor(Math.random() * 10000000000);

Я бы порекомендовал использовать асинхронный ajax-вызов, добавить генерацию случайных чисел к URL-адресу, а затем, чтобы асинхронная работа работала, вы не можете использовать возвращаемое значение из serverTime, а скорее продолжать поток управления, вызывая функция из обработчика успеха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...