通过匿名函数使用setInterval的更好方法

时间:2013-11-09 06:58:55

标签: javascript jquery ajax

我有一个代码,用于从服务器获取对象数组并将其显示在列表中。一切都运行正常,除了我觉得代码是草率和效率不高。我可以在我的AJAX调用中的某处实现setInterval,所以我最后不调用setInterval吗?另外,如果我在我的代码中调用setInterval,我怎么能让AJAX调用刷新,但是一旦打开页面,我还会显示我从服务器获取的字符串?我是AJAX和jQuery的新手(第一天尝试使用AJAX),因此我们非常感谢任何语法/缩进编辑!

function displayMessages(messages){
  $('.messages').append('<li>' + messages + '</li>');
}
function fetchMessages(){
  $.ajax({type: "GET",
  url: "https://api.parse.com/1/classes/chats",
    success: function(data) { 
      for(var i = 0 ; i < 10; i++){
        displayMessages(data.results[i].text);
        if($('.messages li').length > 10){
          $('.messages li').first().remove();
        }
      }
    }

  });
}
fetchMessages();
setInterval(fetchMessages,3000);

2 个答案:

答案 0 :(得分:2)

您可能对此处的解决方案感兴趣; JavaScript: How to get setInterval() to start now?

这使您可以使用在该时间间隔内立即调用的匿名函数:

function setIntervalAndExecute(fn, t) {
    fn();
    return setInterval(fn, t);
}

您可以像这样使用它:

var timer = setIntervalAndExecute(function() {
    $.ajax({
        type: "GET",
        url: "https://api.parse.com/1/classes/chats",
        success: function(data) { 
            for (var i = 0; i < 10; i++) {
                displayMessages(data.results[i].text);
                var msgs = $('.messages li');
                if (msgs.length > 10) {
                    msgs.first().remove();
                }
            }
        }
    });
}, 5000);

P.S。您还错过了setInterval的第二个参数,即时间间隔(以毫秒为单位)。

答案 1 :(得分:0)

首先你的syntax错了。

setInterval(fetchMessages); //wrong

更好的方法是使用变量,以便您可以在需要时暂停/清除它

fetchMessages();
var interval = setInterval(fetchMessages, 60000);  //run every 1 minute
clearInterval(interval);  //This helps to pause the continuous function