2016-12-30 175 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