我有以下JS代码:
var delay = 5000;
function init() {
setInterval(getFileCount, delay);
}
function getFileCount() {
$.get('/notification/course-file-count', function(response) {
if (response.items.length === 0) {
return false;
}
// Do stuff with response
});
}
在页面加载时,我调用了
init()
函数。其想法是开始间隔并每5秒钟调用一次 getFileCount()
函数。因此,间隔在页面加载后等待5秒并运行,但它总是会发出两次 Ajax 调用。
我错过了什么? 更新: 我知道在页面加载时会触发 init() 函数两次(感谢 Yury Tarabanko 的评论)。我不太明白为什么。几乎完整的代码:
$(function() {
'use strict';
function handleCourseNotification() {
var delay = 5000;
function init() {
setInterval(getFileCount, delay);
}
function getFileCount() {
$.get('/notification/course-file-count', function(response) {
if (response.items.length === 0) {
return false;
}
updateCourseList(response.items);
});
}
function updateCourseList(items) {
// update course list...
}
return {
init: init
};
}
if ($('#js-auth-course-list').length) {
var notificationHandler = handleCourseNotification();
notificationHandler.init();
}
});
这是一个小模块,我在页面加载后进行初始化,如果DOM中存在特定的元素 - $('#js-auth-course-list')
。为什么实际上要调用2次init?我只直接调用一次。