2012-01-31 21 views
22

क्या "लोड हो रहा है .." एनीमेशन केवल तभी दिखाना संभव है जब AJAX कॉल कहने से अधिक लेता है, एक सेकंड? मेरी कुछ AJAX कॉल बहुत तेज हैं लेकिन मैं अभी भी गायब होने से पहले एक सेकंड के एक अंश के लिए लोडिंग आइकन देखता हूं। हो सकता है कि यह सिर्फ मुझे हो, लेकिन मुझे यह विचलित लगता है। हालांकि मैं इसे पूरी तरह से हटाना नहीं चाहता हूं। कोई सुझाव? यहाँ मेरी कोड है -jQuery - केवल लोडिंग छवि दिखाएं यदि AJAX कॉल एक सेकंड से अधिक समय लेता है?

$('#loading').hide() 
    .ajaxStart(function() { 
     $(this).show(); 
    }) 
    .ajaxStop(function() { 
     $(this).hide(); 
    }); 

<div id="loading"> 
    <img alt="Loading, please wait.." src="/content/images/spinner.gif" /> 
</div> 

उत्तर

32

आपके पास टाइमर में अपने कोड रखना चाहिए:

var $loader = $('#loading'), timer; 

$loader.hide() 
    .ajaxStart(function() 
    { 
     timer && clearTimeout(timer); 
     timer = setTimeout(function() 
     { 
      $loader.show(); 
     }, 
     1000); 
    }) 
    .ajaxStop(function() 
    { 
     clearTimeout(timer); 
     $loader.hide(); 
    }); 
+0

आपको बहुत बहुत धन्यवाद! इसने एक जादू की तरह काम किया। – tempid

+0

@ जोसेफ मैं इस समाधान को पोस्ट करने के लिए एक ही सवाल धन्यवाद था। क्या मैं वाक्यविन्यास को स्पष्ट कर सकता हूं - var $ loader = $ ("# loading"), टाइमर; टाइमर और चयनकर्ता आईडी = लोडिंग युक्त jquery ऑब्जेक्ट बना रहा है। टाइमर और स्पष्ट टाइमआउट (टाइमर); यह इस तरह क्यों लिखा गया है और बस स्पष्ट नहीं है टाइमआउट (टाइमर)? मैंने इसी तरह की कोशिश की थी लेकिन केवल एक्स मिलीसेक्स के बाद दिखाने के विरोध में शो में देरी में सफल रहा। अभी भी स्पष्ट नहीं है कि वैश्विक घटनाओं को कैसे समाहित किया जाता है, यह प्राप्त करता है। क्या आप विस्तार कर सकते हैं? – codepuppy

+2

@codepuppy - 'clearTimeout' टाइमर आईडी को इसके पैरामीटर के रूप में अपेक्षा करता है। पहली बार 'AJAXStart' चलाता है,' टाइमर 'अपरिभाषित होगा। 'ClearTimeout' के लिए अपरिभाषित होने पर कोई त्रुटियां नहीं बढ़ रही हैं, मैंने इसे पर्याप्त परीक्षण नहीं किया है, इसलिए मैंने पहले जांच की है कि' टाइमर 'वास्तव में आईडी है या नहीं। नहीं कि 'टाइमर और&TimeTimeout (टाइमर);' '(टाइमर) {clearTimeout (टाइमर) के बराबर है; } '। –

9

आप एक setTimeout() इस्तेमाल कर सकते हैं।

var loadingTimeout; 
$('#loading').hide() 
.ajaxStart(function() { 
    var element = $(this); 
    loadingTimeout = setTimeout(function() { 
     element.show(); 
    }, 1e3); 
}) 
.ajaxStop(function() { 
    clearTimeout(loadingTimeout); 
    $(this).hide(); 
}); 
+0

यह भी काम किया। धन्यवाद महोदय। – tempid

+0

1) आपको 'तत्व' को तर्क के रूप में कैप्चर करना होगा। 2) 'तत्व' को पास न करें क्योंकि यह अनिर्धारित है - 'यह' पास करें। 3) यह आईई में काम नहीं करेगा, क्योंकि यह आपको इस फैशन में तर्क पारित करने की अनुमति नहीं देता है। –

+0

@ जोसेफ सिल्बर मुझे एक बुरा दिन कोडिंग हो रहा है ... ठीक हो जाएगा। – alex

संबंधित मुद्दे