我有一个页面,可通过Ajax自动刷新内容。我希望它是微妙的,所以我不想在自动页面刷新期间显示我的加载gif。所以我用getPosts函数做了类似的事情(为简洁起见,剪掉了不必要的代码)
function getPosts(image)
{
//loading icon while getPosts
if (image)
{
$("#postcontainer").bind("ajaxStart", function(){
$(this).html("<center><img src='ajax-loader.gif' /></center>");
});
} //... ajax call, etc. don't worry about syntax errors, they aren't in real code
我知道中心标签已弃用,只是一个无耻的捷径。
然后我将间隔设置为
setInterval(function() { getPosts(false); }, 10000);
因此,我的自动通话不会触发图片显示
然后,我所有的手动刷新操作都将其称为
getPosts(true);
您可以(可能)在my personal site上看到正在使用的错误
问题是,setInterval函数似乎使用了最新函数调用中的图像布尔值。因此,它首先不会在自动呼叫期间显示图像,但是在我单击手动刷新后,它将在每次呼叫期间开始显示图像。
我该如何应对?
感谢所有查看/发布该主题的人!我希望这个问题对其他人有很好的参考意义。
最佳答案
问题是,一旦将“ ajaxStart”处理程序绑定到容器,它将在对该容器的每次ajax调用上执行。也就是说,第一次使用getPosts(true)
调用它将创建绑定。下次使用getPosts(false)
调用它时,它不会沿着该if
路径移动,但是绑定仍然存在,因此当您执行ajax调用时,该处理程序仍会执行-并且该处理程序没有任何条件逻辑。 (实际上,我相信您最终将在每次调用getPosts(true)
时创建的一个“ ajaxStart”事件上具有多个绑定,但是由于它们全部都执行相同的操作来覆盖相同的html,因此它们可能不会引起注意。 )
为什么不做这样的事情:
function getPosts(image) {
if (image) {
$("#postcontainer").html("<center><img src='ajax-loader.gif' /></center>");
}
// Actual ajax call here
}
setInterval(function() { getPosts(false); }, 10000);
关于javascript - 为什么参数始终没有发送到setInterval()中的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6869038/