Удерживайте вызов ajax в каждой минуте раздела вызова - PullRequest
0 голосов
/ 15 марта 2011

я звоню ajax каждую секунду на странице .. Здесь страница сервера возвращает случайно сгенерированное число , используя это число (, преобразованное в секунды ). Я запускаю другую функцию в ajax success . это работает

Моя проблема

предположим, случайное число = 5 означает функция триггера () , вызываемая через 5 секунд с использованием setTimeout , но повторный вызов ajax вызывает каждую 1 секунду, поэтому триггерная функция также вызывается много раз.

я хочу сделать ожидание вызова ajax до выполнения функции триггера . Это означает, что я хочу приостановить этот вызов ajax до 5 секунд после этого возобновления

Как я могу это сделать?

Моя кодировка

//this ajax is called every minute
        $.ajax({
            type: "POST",
            url: 'serverpage', 
            data: ({pid:1}),
            success: function(msg) { 

                var array = msg.split('/');
                if(array[0]==1){
                setTimeout(function() {  trigger(msg);          },array[1]+'000');
             }
            }

        }); 


//and my trigger function
function trigger(value)
{
    alert("i am triggered !");
}

ответ сервера может быть

1/2 или 1/5 или 1/10 или 1/1

здесь 1 / 3 (преобразуется в секунды)

Ответы [ 3 ]

3 голосов
/ 15 марта 2011

Похоже, вы должны запускать вызов ajax в вашей функции триггера или при обратном вызове с ошибкой. Запустите его один раз на странице, готовой, а затем запустите его, когда вызывается ваша функция успеха.

function ajaxCall() {
    $.ajax({
        type: "POST",
        url: 'serverpage', 
        data: ({pid:1}),
        success: function(msg) { 
            var array = msg.split('/');
            if(array[0]==1){
                setTimeout(function() {
                    trigger(msg);
                    ajaxCall();
                }, parseInt(array[1])*1000);
            }
        },
        error: function() {
            setTimeout(ajaxCall, 1000);
        }
    }); 
}

$(ajaxCall);

Примечание: вы должны ответить с некоторым JSON вместо вашего пользовательского формата данных "1/3". Что-то вроде "{success: 1, delay: 3}" будет гораздо надежнее.

0 голосов
/ 15 марта 2011

Вместо вызова AJAX в таймере, просто вызывайте его после каждого выполнения функции trigger.

//and my trigger function
function trigger(value)
{
    alert("i am triggered !");
    MyAjaxFunction();
}

Вы должны вызывать его один раз при загрузке страницы:

$(document).ready(function(){
    MyAjaxFunction();
});
0 голосов
/ 15 марта 2011

вы можете вызывать вашу ajax-функцию рекурсивно из функции обратного вызова 'success' или, в вашем случае, лучше из функции триггера.

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