.ajaxStart和.ajaxStop不触发的问题

7

请问有人能帮我理解为什么这不起作用吗?loading.gif出现了,表示ajax.load正在加载页面,但始终不会消失。这让我相信既没有调用.ajaxStart也没有调用.ajaxStop函数(因为它最初也没有被隐藏)。

TIA!

CSS:

#loadingDiv {
background-image: url('images/loading.gif');
height: 32px;
width: 32px;
margin: 50px auto 50px auto; }

jQuery:

<script type="text/javascript">
        $(document).ready(function()
            {
                $('#loadingDiv')
                    .hide()
                    .ajaxStart(function() {
                        $(this).show();
                    })
                    .ajaxStop(function() {
                        $(this).hide();
                    })
                ;
                $("#results").load("i/getAllInfo.class.php"); return false;
            };
    </script>
3个回答

7

我知道这是一个老问题,但是我刚刚解决了自己的这个问题,所以我会发布我的解决方案:基本上,检查你的JavaScript是否存在异常或语法错误。

从评论中可以看出,你的问题可能是由语法错误引起的。对于我来说,在我的ajaxSuccess处理程序中有一个异常,这妨碍了ajaxStop的触发。然后由于ajaxStart仅在批次的第一个ajax调用时触发,因此后续的ajax调用不会触发。jQuery从未收到ajaxStop,因此它认为该批次仍在运行。


1
没错。成功回调中的异常阻止了我的ajaxStop触发。 - Jesper Mygind

3
不要将其链接到loadingDiv
尝试使用以下方法:
$.ajaxStart(function() {
   $('#loadingDiv').show();
});

$.ajaxStop(function() {
   $('#loadingDiv').hide();
});

2

你不需要从文档就绪函数返回false,但你需要添加右括号) ,如下所示:

     $("#results").load("i/getAllInfo.class.php"); return false;
 }); //<----- you need the )

您的url "i/getAllInfo.class.php" 看起来有误。

尝试注释掉 .ajaxStop() 中的 $(this).hide(),像这样:

.ajaxStop(function() {
     //$(this).hide();
})

因为它可能只出现了很短的时间,以至于你看不到它。
这是一个给你的示例: http://jsfiddle.net/GrsRT/11/

现在它可以工作了。由于某种原因,我很难确保我已经关闭了所有的括号和花括号。非常感谢! - Matt Rose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接