jQuery плагин обратного отсчета и AJAX - PullRequest
0 голосов
/ 27 марта 2009

Я использую плагин jQuery Countdown для реализации обратного отсчета и вызова веб-службы по истечении таймера.

Проблема в том, что я использую AJAX на странице, и мне приходится переустанавливать обратный отсчет при каждом запросе AJAX следующим образом:

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(SetupTimer);

/*Initial setup*/
$(document).ready(function() {
    SetupTimer();
});

function SetupTimer() {
        var serverTime = new Date();
        var cutoffTime = new Date($("#<%= cutoffTime.ClientID %>").val());
        serverTime.setHours(serverTime.getHours());
        if (serverTime < cutoffTime) {
            $('#timer').countdown('destroy'); /*should work, but doesn't*/
            $('#timer').countdown({ until: cutoffTime, serverTime: serverTime, onExpiry: OrderingEnded, format: 'yowdHMS' });
        } 
        else
            OrderingEnded();
    }

По какой-то причине это создает новый экземпляр обратного отсчета при каждом запросе, что приводит к многочисленным вызовам Webservice, когда истекает обратный отсчет.

Как мне убедиться, что одновременно существует только один экземпляр Обратного отсчета?

EDIT

нашел это в документации, но не делает это для меня

        $('#timer').countdown('destroy');

Ответы [ 3 ]

1 голос
/ 27 марта 2009

ок, разобрался, просто нужно позвонить на

$('#timer').countdown('destroy');

on beginRequest

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(DeleteTimer);
prm.add_endRequest(SetupTimer);

$(document).ready(function() {
    SetupTimer();
});


function DeleteTimer() {
    $('#timer').countdown('destroy');
}
function SetupTimer() {
    var serverTime = new Date();
    var cutoffTime = new Date($("#<%= cutoffTime.ClientID %>").val());
    serverTime.setHours(serverTime.getHours());
    if (serverTime < cutoffTime) {          
        $('#timer').countdown({ until: cutoffTime, serverTime: serverTime, onExpiry: OrderingEnded, format: 'yowdHMS' });
    } 
    else
        OrderingEnded();
}
0 голосов
/ 10 апреля 2010

У меня похожий тип проблемы. Я использую веб-сервисы, чтобы получить текущее время с сервера с помощью функции serversync в плагине jquery.countdown.js. У меня возникла проблема

Как получить обратный отсчет Синхронизация с jquery с помощью плагина "jquery.countdown.js"?

пожалуйста, найдите решение и дайте мне знать, спасибо.

0 голосов
/ 27 марта 2009

Вы, вероятно, хотите setInterval(). Это позволяет повторять таймер каждые X миллисекунд. Вы можете использовать clearInterval(), чтобы остановить его.

Вот некоторые чтения , сравнивающие setInterval() и setTimeout().

Еще одна опция для воссоздания таймера только в функции обратного вызова вызова AJAX. Это обеспечит запуск нового таймера только после завершения предыдущего вызова AJAX, например:

 function CheckServer() {
     $.get('/get_something.html', function() {
         timer = setTimeout('CheckServer', 5000);
     });
 }
...