2

当我发送 jQuery 时,我想通过ajaxStart(). 完成后,使用 .gif 应该会消失ajaxStop()

$( document ).ajaxStart( function () {
 $('#info').show();

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

它在 Firefox 上运行良好,但在 IE 中不行(我使用的是版本 8)。似乎 IEajaxStart()在查询结束时执行ajaxStop(). 如果我注释掉该$('#info').hide();部分,我会在获得数据后看到 gif。

我可以通过设置来解决它async=true,但我不想这样做。还有其他方法吗?

我读了一些文章,表明很多人都有这个问题,但我找不到答案。

编辑:

我认识到这ajaxStart是正确执行的,但是该请求导致浏览器冻结,直到我得到响应。这种情况发生得如此之快,以至于无法显示加载 gif。alert()在之后尝试了它,ajaxStart然后出现了gif。之后alert弹出并发送请求,导致浏览器和 gif 冻结。

4

3 回答 3

1

尝试使用该display属性显示/隐藏您的 DIV。

HTML

<div id="loading">&nbsp;</div>

CSS

#loading {
    display: none;
    background: rgba(255, 255, 255, .6) 
            url(../img/loading.gif) 
            50% 50% 
            no-repeat;
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0;
    left: 0;
}

jQuery

$(document).on({
    ajaxStart: function() {
        $('#loading').css('display', 'block')
    },
    ajaxStop: function() {
        $('#loading').css('display', 'none')
    }
});
于 2014-07-24T10:08:44.087 回答
1

我也有同样的问题。加载 div 在 Firefox 中显示,但在 ie8 和 ie9 中不显示。我所做的只是添加了一个 setTimeout 间隔及其工作原理。

首先检查浏览器是IE8还是IE9。在您的 html 中添加以下内容:

<!--[if IE 8]><html lang="en-us" class="ie ie8"><![endif]-->
<!--[if IE 9]><html lang="en-us" class="ie ie9"><![endif]-->
<!--[if gt IE 9]><!--> <html lang="en-us"><!--<![endif]-->
<head>

如果是 ie8 或 ie9,则添加一个间隔,如果不是,则不要。

$(document).ready(function() {
    var ie8or9 = $('html').hasClass('ie8') || $('html').hasClass('ie9');
    $(document).ajaxStart(function() {
        setTimeout(function(){
            $('#loading').show();
        }, ie8or9 ? 50 : 0);
    }).ajaxStop(function() {
        setTimeout(function(){
            $('#loading').hide();
        }, ie8or9 ? 100 : 0);
    });
});
于 2015-04-14T04:24:31.183 回答
0

请先尝试在本网站上浏览类似问题的答案。

JQuery Internet Explorer 和 ajaxstop

你想要ajaxComplete

$(document).ajaxComplete(function() {loading.hide()});

http://api.jquery.com/ajaxComplete/

于 2013-04-03T11:01:10.657 回答