JQuery & Timer :: Обновление текста гиперссылки из веб-сервиса - PullRequest
3 голосов
/ 08 апреля 2011

Что я должен выяснить, как это сделать - это запустить веб-сервис на удаленном сервере, чтобы определить, сколько сообщений доступно для чтения, и заполнить текст гиперссылки количеством сообщений. Хитрость в том, что я бы хотел, чтобы это запускалось из таймера (например, каждые 5 минут). Вот что я порвал с

$.ajax( {type:'Get',url:'http://foobar.com/ws',success:function(messageCount) 
    { 
        $('a.message').text(messageCount + ' Messages');
    }
})

но по общему признанию, я совершенно невежествен, когда дело доходит до таймеров в javascript / jquery. Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 апреля 2011

Вам необходимо использовать функцию setInterval (). Это запустит определенную функцию с заданным интервалом. Попробуйте это:

$(function() {
    setInterval("getDataFromWS()", 300000) // 300,000 miliseconds is 5 minutes
});

function getDataFromWS() {
    $.ajax({
        type:'Get',
        url:'http://foobar.com/ws',
        success:function(messageCount) { 
            $('a.message').text(messageCount + ' Messages');
        }
    })
}
3 голосов
/ 08 апреля 2011

Если вы хотите делать это периодически, вы должны использовать setInterval.

//create the timer (and save the unique id returned
//so we can stop it later if needed, using clearTimer())
//This will fire every 300,000 millisecs (= 5 mins) 
//and call the updateMessageCount function
var msgCounTimer = setInterval(updateMessageCount, 300000);

function updateMessageCount() {
    $.ajax({
            type:'GET',
            url:'http://foobar.com/ws',
            success:function(messageCount)
            { 
                $('a.message').text(messageCount + ' Messages');
            }
        });
}

Если, однако, вы хотите сделать это один раз, используйте setTimeout - вы можете периодически делать это и с setTimeout, за исключением того, что вам нужно будет каждый раз звонить для установки таймера.

Единственный случай, когда я могу подумать о том, где вы, возможно, захотите использовать setTimeout вместо setInterval, будет, когда работа, которую вы выполняете в функции, вызываемой по таймауту (updateMessageCount в моем примере ниже), занимает длиннее , чем интервал тайм-аута, из-за которого следующий тайм-аут (при использовании setInterval) будет казаться мгновенным, поскольку таймер будет срабатывать каждые n секунд независимо от того, была ли вызвана функция предыдущим тайм-аут все еще выполняется. Если вместо этого вы хотите убедиться, что между последовательными вызовами вашего обработчика тайм-аута будет n миллисекунд (в отличие от того, как ваш обработчик тайм-аута вызывается каждые n миллисекунд), вы должны вместо этого использовать setTimeout и настроить его каждый раз, когда вы заканчиваете свою тяжелую обработку.

Примечание Я вижу, что вы используете абсолютный URL в примере, поэтому я подумал, что я укажу на это, если вы не знакомы с ним - следите за политикой того же происхождения , которая ограничивает ваш JavaScript от делать запросы к доменам, отличным от того, из которого он исходит.

0 голосов
/ 08 апреля 2011

Вам нужно посмотреть на функцию setTimeout в Javascript

например, var t=setTimeout("yourfunction()",10000);

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