2016-12-30 67 views
0

我希望在执行ajax请求期间延迟我的加载gif的外观,以便在请求持续时间不超过一秒时不会显示。即使gif没有增加很大的延迟,但当我在setTimout函数中将该值设置为80以上时,它就不会。我错过了什么?setTimeout与ajaxStart无法正常工作

function ajaxLoading() 
{ 
    $(document).ajaxStart(function() 
    { 
     ajaxLoadingTimeout = setTimeout(function() { 
      $('#loading').show(); 
     }, 1000) 

    }); 

    $(document).ajaxStop(function() { 
     clearTimeout(ajaxLoadingTimeout); 
     $('#loading').hide(); 
    }); 
} 

回答

0

你可以试试这个:

function ajaxLoading() 
{  
    var flag=true; 
    $(document).ajaxStart(function() 
    { 
     flag=true; 
     ajaxLoadingTimeout = setTimeout(function() { 
      if(flag){ 
       $('#loading').show(); 
      } 
     }, 1000) 

    }); 

    $(document).ajaxStop(function() { 
     flag=false; 
     clearTimeout(ajaxLoadingTimeout); 
     $('#loading').hide(); 
    }); 
} 
+0

我已经检查这个和其他许多方面,人们在其他职位建议,但可惜的是相同的事情发生。它仅适用于最大值80.必须有别的东西阻止它执行。 – Sky

+0

此逻辑需要工作,因为如果ajax呼叫在1秒前停止,那么该标志设置为false。 –

+0

我知道,我仔细检查它只是为了确保。它仍然适用于值<84.由于某些原因,它不适用于大于83的值。 – Sky

0

更新的答案基于评论

function ajaxLoading() 
{ 
    $('document') 
    .ajaxStart(function(){ 
     $("#loading").delay(1000).show(); 
    }) 
    .ajaxStop(function(){ 
     $("#loading").hide(); 
     $(this).unbind("ajaxStart"); 
    }); 
} 
+0

我想加载gif延迟1秒,以便它不会显示,如果ajax请求持续少于1秒。我只希望gif在请求持续超过1秒时显示出来。 – Sky

+0

你可以设置延迟1秒,然后加载div $(“#loading”)。delay(1000).show();回答更新 –

+0

根据jQuery文档,只有队列中的后续事件被延迟;例如,这不会延迟不使用效果队列的.show()或.hide()的无参数形式。我试图使用.fadeIn(400)而不是show()函数,但不知何故它只有在请求完成后才会触发。 – Sky