在每分钟呼叫部分保持ajax呼叫

时间:2011-03-15 08:08:08

标签: javascript jquery ajax

我在页面中每隔一秒打电话 ajax 这里服务器页面返回随机生成的数字,使用此数字(转换为秒)我触发 ajax success <中的另一项功能< / strong> .it正常工作

我的问题

假设随机数= 5 表示触发()函数,使用 setTimeout 在5秒后调用 ,但是rember 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 个答案:

答案 0 :(得分:3)

看起来您应该在触发器函数或错误回调中触发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}”这样的东西会更加可靠。

答案 1 :(得分:0)

你可以从你的'success'回调函数中递归调用你的ajax函数,或者在你的情况下,更好的是来自触发函数。

答案 2 :(得分:0)

不是在计时器中调用AJAX,而是在每次执行trigger函数后调用它。

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

你必须在页面加载时调用一次:

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