如何自动调用此功能

时间:2015-06-18 23:41:01

标签: javascript jquery

我使用以下函数调用ajax请求,并使用响应填充某些相应的div:

$( function() {

    $(document).ready(function() {

        var postData = "";

        $.ajax( {
            url : \'functions/ajax_api.php?\',
            type : \'post\',
            data : postData,                
            success : function( resp ) {
                $(\'#id1\').html($(\'#id1\' , resp).html());
                $(\'#id2\').html($(\'#id2\' , resp).html());
            }
        });
           return false;
    });

});

该功能正常。我的问题是如何每隔几秒钟自动调用它?

我尝试使用 window.setTimeout(function,3000),但我无法正确设置。

3 个答案:

答案 0 :(得分:5)

使用setInterval();代替.setTimeout()

让我帮你解决一下

var interval , setItinterval; // just a variables you can change names
interval = function(){
    // ajax code here
}

运行它..使用:

setItinterval = setInterval(interval , 3000);

停止它..使用

clearInterval(setItinterval);

请务必阅读setInterval以获取更多信息。

对于完整答案和使用setInterval()时我想说的最后一件事;最好使用visibilitychange来避免服务器错误,服务器负载或类似的东西

document.addEventListener('visibilitychange',function(){
    if(document.visibilityState == 'visible'){
        // user view the page
    }else{
        // user not see the page
    }
});

答案 1 :(得分:2)

您可以使用setTimeout()setInterval,但setInterval可能会导致多个同时进行的ajax调用,如果这些调用花费的时间太长而无法响应。如果你在ajax成功回调中调用setTimeout(),那不是问题。

要使用setTimeout(),首先在函数中包装ajax调用。然后,您可以将setTimeout()的调用添加到ajax成功回调中。您还需要调用该函数一次以开始循环。

$(function() {
    function postData() {
        var postData = "";
        $.ajax({
            url: 'functions/ajax_api.php?',
            type: 'post',
            data: postData,                
            success: function(resp) {
                $('#id1').html($('#id1', resp).html());
                $('#id2').html($('#id2', resp).html());

                // Call postData again after 5 seconds.
                setTimeout(function() { postData(); }, 5000);
            }
        });
    }

    // Call postDate the first time to start it off.
    postData();
});

注意:在成功回调中调用setTimeout时,如果ajax调用失败,循环将中断。您可能需要这样做,但如果您希望它更像setInterval,则可以在完整的回调中调用setTimeout

答案 2 :(得分:0)

这里有一些示例代码可以执行此操作(请注意,它在文档加载时运行函数,然后启动间隔)。如果需要停止,可以随时使用clearInterval(refresh_interval)。

var refresh_interval;

function update_content() {
    $.ajax({
        url : \'functions/ajax_api.php?\',
        type : \'post\',
        data : postData,                
        success : function( resp ) {
            $(\'#id1\').html($(\'#id1\' , resp).html());
            $(\'#id2\').html($(\'#id2\' , resp).html());
        }
    });
}

$(document).ready(function() {
    update_content();
    setInterval(update_content, 3000);
}

使用间隔的相关文档位于:https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval

虽然您可能希望查看Server Sent Events,但它可能是您想要的更好的解决方案。