我有一个代码,用于从服务器获取对象数组并将其显示在列表中。一切都运行正常,除了我觉得代码是草率和效率不高。我可以在我的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);
答案 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