2013-04-02 67 views
2

当我发送jQuery时,我想通过ajaxStart()显示加载gif。完成后,gif应该使用ajaxStop()消失。Internet Explorer和ajaxStart/ajaxStop

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

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

它可以在Firefox上正常工作,但不在IE中(我使用的是版本8)。看来,IE在查询结束时执行ajaxStart(),并且在执行ajaxStop()之后。如果我注释掉$('#info').hide();部分,我会在看到数据后看到gif。

我可以通过设置async=true来避开它,但我不想这样做。有另一种方法吗?

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

编辑:

我认识到,ajaxStart正确执行,但请求会导致浏览器冻结,直到我得到回应。这发生得如此之快,以至于无法显示加载gif。在ajaxStart和gif显示之后,用alert()试了一下。之后,alert弹出,然后发送请求,导致浏览器和gif冻结。

+0

你使用的是什么jQuery版本? – Spudley

+0

我使用的版本1.7.2 –

回答

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') 
    } 
}); 
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); 
    }); 
}); 
+0

感谢您的提示。在ie11或Chrome中不适合我。正如您发现的那样,您可以很好地使用Firefox – mattpm