我有一个页面,可通过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/

10-10 00:12