我使用以下函数调用ajax请求,并使用响应填充某些相应的div:
$( function() {
$(document).ready(function() {
var postData = "";
$.ajax( {
url : \'functions/ajax_api.php?\',
type : \'post\',
data : postData,
success : function( resp ) {
$(\'#id1\').html($(\'#id1\' , resp).html());
$(\'#id2\').html($(\'#id2\' , resp).html());
}
});
return false;
});
});
该功能正常。我的问题是如何每隔几秒钟自动调用它?
我尝试使用 window.setTimeout(function,3000),但我无法正确设置。
答案 0 :(得分:5)
使用setInterval();
代替.setTimeout()
让我帮你解决一下
var interval , setItinterval; // just a variables you can change names
interval = function(){
// ajax code here
}
运行它..使用:
setItinterval = setInterval(interval , 3000);
停止它..使用
clearInterval(setItinterval);
请务必阅读setInterval以获取更多信息。
对于完整答案和使用setInterval()时我想说的最后一件事;最好使用visibilitychange
来避免服务器错误,服务器负载或类似的东西
document.addEventListener('visibilitychange',function(){
if(document.visibilityState == 'visible'){
// user view the page
}else{
// user not see the page
}
});
答案 1 :(得分:2)
您可以使用setTimeout()
或setInterval
,但setInterval
可能会导致多个同时进行的ajax调用,如果这些调用花费的时间太长而无法响应。如果你在ajax成功回调中调用setTimeout()
,那不是问题。
要使用setTimeout()
,首先在函数中包装ajax调用。然后,您可以将setTimeout()
的调用添加到ajax成功回调中。您还需要调用该函数一次以开始循环。
$(function() {
function postData() {
var postData = "";
$.ajax({
url: 'functions/ajax_api.php?',
type: 'post',
data: postData,
success: function(resp) {
$('#id1').html($('#id1', resp).html());
$('#id2').html($('#id2', resp).html());
// Call postData again after 5 seconds.
setTimeout(function() { postData(); }, 5000);
}
});
}
// Call postDate the first time to start it off.
postData();
});
注意:在成功回调中调用setTimeout
时,如果ajax调用失败,循环将中断。您可能需要这样做,但如果您希望它更像setInterval
,则可以在完整的回调中调用setTimeout
。
答案 2 :(得分:0)
这里有一些示例代码可以执行此操作(请注意,它在文档加载时运行函数,然后启动间隔)。如果需要停止,可以随时使用clearInterval(refresh_interval)。
var refresh_interval;
function update_content() {
$.ajax({
url : \'functions/ajax_api.php?\',
type : \'post\',
data : postData,
success : function( resp ) {
$(\'#id1\').html($(\'#id1\' , resp).html());
$(\'#id2\').html($(\'#id2\' , resp).html());
}
});
}
$(document).ready(function() {
update_content();
setInterval(update_content, 3000);
}
使用间隔的相关文档位于:https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval
虽然您可能希望查看Server Sent Events,但它可能是您想要的更好的解决方案。