jQuery ajax加载图片没有隐藏

时间:2012-09-20 03:22:16

标签: jquery ajax image loading

我在点击链接时使用jquery ajax将单独的页面加载到模态窗口中。在加载模态内容时,我会显示一个加载图像。加载图像位于页面上的div中,并显示页面上的任何ajax加载。这一切都正常,但在ajax调用成功后我似乎无法隐藏图像。

这是我正在使用的jquery:

$('#loadingImage').ajaxStart(function(){
    $(this).show();
});
$('#loadingImage').ajaxSuccess(function(){ //also tried ajaxStop
    $(this).hide();
});

function loadMap(){         
$('#whereweare-map').click(function(){
    $('#lightBox').removeClass().addClass('reveal-modal expand');
    $.ajax({
        url: '/Map#mapLoad',
        success: function(data){
            $('#lightBox').reveal();
            $('#lightBoxContent').html(data);         
        }
    });
       return false;
        });
    }
loadMap();

HTML:

<div id="imageLoading"></div>
<a href="#" id="whereweare-map">Where We Are</a>
<div class="reveal-modal" id="lightBox">
    <div id="lightBoxContent"><!-- Load Content Here --></div>
    <a class="close-reveal-modal">&#215;</a>
</div>

CSS:

#loadingImage {
display:none; 
height:84px; 
width:84px; 
position:fixed; 
top:50%; 
left:50%; 
z-index: 1;
background: url('preloader.gif') no-repeat center center;
background-color: #000; 
background-color: rgba(0, 0, 0, 0.7);
-moz-border-radius:45px;
-webkit-border-radius:45px;
border-radius:45px;
}

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

ajaxStart和ajaxStop是全局函数。所以他们回应页面上的任何ajax请求。而不是显示/隐藏这些函数,为什么不在beforeSend和complete函数中执行相同的操作..这可以确保在正确的时间显示/隐藏图像

function loadMap() {
    $('#whereweare-map').click(function () {
        var $loader = $('#loadingImage');
        $('#lightBox').removeClass().addClass('reveal-modal expand');
        $.ajax({
            url: '/Map#mapLoad',
            success: function (data) {
                $('#lightBox').reveal();
                $('#lightBoxContent').html(data);
            },
            beforeSend : function(){
               $loader.show();
            },
            complete : function(){
               $loader.hide();
            }
        });
        return false;
    });
}
loadMap(); 

也代替ajaxSuccess为什么不尝试使用ajaxComplete函数隐藏你的div ..

$('#loadingImage').ajaxComplete(function(){ //also tried ajaxStop
    $(this).hide();
});

答案 1 :(得分:0)

像这样更改你的ajax

$.ajax({
        url: '/Map#mapLoad',
        success: function(data){
            $('#lightBox').reveal();
            $('#lightBoxContent').html(data);        
            $('#loadingImage').hide(); //hide it here


        }
    });

答案 2 :(得分:0)

尝试以下代码

      $(document).ready(function () {            
        $('#loadingImage').hide()  // hide it initially
             .ajaxStart(function () {
                 $(this).show();
             })
             .ajaxStop(function () {
                 $(this).hide();
             });
      });

答案 3 :(得分:0)

$('#LoadingImage').bind('ajaxStart', function(){
    $(this).show();
}).bind('ajaxStop', function(){ 
    $(this).hide();
});

尝试将其绑定以启动和停止功能......