每隔X分钟用AJAX调用一次文件直到Y时间?

时间:2015-01-09 02:12:17

标签: jquery ajax

我有以下代码

$(document).ready(function() {
    $.ajaxSetup({ cache: false }); // This part addresses an IE bug. without it, IE will only load the first number and will never refresh
    setInterval(function() {
        $('#chatresults').load('includes/chat.php');
    }, 3000); // the "3000" here refers to the time to refresh the div. it is in milliseconds.
});

它很漂亮。这会每3000毫秒加载一次页面,但它会永久地执行,这意味着如果有人将浏览器打开,我的服务器存储会因为在其他页面上运行MySQL查询而耗尽了很多。

我如何限制它,以便每隔3000秒调用一次,但是在10分钟后(或在X加载后)它会停止(直到页面被刷新/更改)?

我尝试了其中一个答案,但它没有奏效。对于AJAX,我是一个菜鸟,我做得对吗?

if (counter == 12) {
    clearInterval(aux);
}
    $(document).ready(function() {
    $.ajaxSetup({ cache: false }); // This part addresses an IE bug. without it, IE will     only load the first number and will never refresh
aux = setInterval(function() {
    $('#chatresults').load('includes/chat.php');
}, 3000);
counter++;

    });

2 个答案:

答案 0 :(得分:2)

三个简单的步骤:

  1. 将setInterval分配给处理程序:

    auxHandler = setInterval(function() {
        $('#chatresults').load('includes/chat.php');
    }, 3000);
    
  2. 跟踪使用变量调用ajax的次数(例如:call it counter

    counter++;
    
  3. counter达到最大呼叫数时,请清除间隔:

    if (counter == MAX_NUM_CALLS) {
        clearInterval(auxHandler);
    }
    

  4. 在您的特定情况下,代码如下所示:

    var intervalHandler;
    var counter = 0;
    
    $(document).ready(function() {
        $.ajaxSetup({ cache: false });
        intervalHandler = setInterval(function() {
            $('#chatresults').load('includes/chat.php');
            counter++;
            if (counter == 12) {
                clearInterval(intervalHandler);
            }
        }, 3000); 
    });
    

    您还可以看到它正在使用此jsfiddle:http://jsfiddle.net/utrdha8f/1/(更改您对console.log的聊天调用)

答案 1 :(得分:1)

我认为您正在寻找的是answer

在给定时间刷新而不是间隔。

function refreshAt(hours, minutes, seconds) {
    var now = new Date();
    var then = new Date();

    if(now.getHours() > hours ||
       (now.getHours() == hours && now.getMinutes() > minutes) ||
        now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) {
        then.setDate(now.getDate() + 1);
    }
    then.setHours(hours);
    then.setMinutes(minutes);
    then.setSeconds(seconds);

    var timeout = (then.getTime() - now.getTime());
    setTimeout(function() { window.location.reload(true); }, timeout);
}
  

然后你可以添加一个脚本标签来调用refreshAt()函数。

refreshAt(15,35,0); //Will refresh the page at 3:35pm