在这里:
我有一个简单的AJAX组件,每3秒执行一次GET API调用:
<script>
$(document).ready(
function() {
setInterval(function() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
}, 3000);
}
);
</script>
这很好地工作了...它每三秒钟从我的nodejs服务器代码中呼叫并获得值。正如它应该。但这只是之后的页面加载。我想在页面加载上以及之后每三秒钟获取每三秒钟的值。我该怎么做?
将您的代码移至功能和settimeout。每3秒钟在Load 和上称其为:
<head>
<script>
function loadValue() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
setTimeout(loadValue, 3000);
}
loadValue();
</script>
这样,您的功能每3秒就会自行调用一次,不需要 domready
我会这样做:
<script>
var loadValues = function() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
};
$(document).ready(
function() {
loadValues();
setInterval(loadValues, 3000);
}
);
</script>
在单独的函数中分开您的ajax调用:
function loadAjax() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
}
然后在setInterval
中使用它,并且在加载文档后一次,如下:
<script>
//declare ajax request as separate function
function loadAjax() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
}
//call once after page is loaded
loadAjax();
$(document).ready(
//use the same in setInterval
setInterval(loadAjax, 3000);
);
</script>
正如您在此问题中看到的那样,如果要立即启动间隔,则应同时调用setInterval
和功能。
<script>
function call() {
$.get('/value_one', function(res) {
$('#value_one').text(res);
});
$.get('/value_two', function(res) {
$('#value_two').text(res);
});
}
$(document).ready(function () {
call();
setInterval(call, 3000);
});
</script>
,但实际上我认为最好的选择是第一次从服务器渲染数据,然后您只需要间隔即可每3秒更新数据。您可以为此使用EJ。
另一个想法,我认为您需要在上次更新后3秒刷新(服务器响应后),而不是每3秒钟一次。