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

标签 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);

最佳答案

您可能对此处的解决方案感兴趣; 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);

附注您还缺少 setInterval 的第二个参数,它是以毫秒为单位的时间间隔。

关于javascript - 通过匿名函数使用 setInterval 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873341/

相关文章:

javascript - jQuery UI 对话框 - 在已打开的 jQuery UI 对话框中保留单击的链接

javascript - 如何改进元素位置的计算?

jquery - 小图像缩略图不起作用

javascript - 单击图像后如何播放/启动 vimeo 视频?

javascript - 在 jQuery AJAX 中显示很棒的字体

javascript - 如何使用 typescript 将类变量传递到函数内的函数中?

javascript - Ajax 与 chrome 扩展

Javascript : Tippy. js 不适用于动态内容

java - 区分要在 Struts 2 中使用的成功数据和错误消息?

php - 如何组合两个文本超链接