JQuery के साथ "व्यस्त" संकेतक कैसे प्रदर्शित करें?


81

मैं वेब पेज में एक विशिष्ट बिंदु पर कताई "व्यस्त" संकेतक कैसे प्रदर्शित कर सकता हूं?

जब एक अजाक्स अनुरोध शुरू / पूरा हो जाता है तो मैं संकेतक को शुरू / बंद करना चाहता हूं।

क्या यह वास्तव में एक एनिमेटेड जिफ को दिखाने / छिपाने की बात है, या एक और अधिक सुरुचिपूर्ण समाधान है?

जवाबों:


94

आप बस एक जिफ़ को दिखा / छुपा सकते हैं, लेकिन आप इसे ajaxSetup पर एम्बेड भी कर सकते हैं, इसलिए इसे प्रत्येक ऐजैक्स अनुरोध पर कहा जाता है।

$.ajaxSetup({
    beforeSend:function(){
        // show gif here, eg:
        $("#loading").show();
    },
    complete:function(){
        // hide gif here, eg:
        $("#loading").hide();
    }
});

एक नोट यह है कि यदि आप लोडिंग स्पिनर के बिना एक विशिष्ट अजाक्स अनुरोध करना चाहते हैं, तो आप इसे इस तरह से कर सकते हैं:

$.ajax({
   global: false,
   // stuff
});

इस तरह से पिछले $ .ajaxSetup जो हमने किया है वह अनुरोध को प्रभावित नहीं करेगा global: false

अधिक विवरण यहां उपलब्ध है: http://api.jquery.com/jQuery.ajaxSetup


2
के लिए +1 ajaxSetup()। यदि globalसंपत्ति के बारे में और स्पष्टीकरण दिया गया था तो पसंद करेंगे ।
RabidFire

@ रेबिडफायर, वास्तव में वैश्विक की यहाँ आवश्यकता नहीं है, यह सिर्फ $ .ajax के लिए है
रॉड्रिगो

@gov, gif की स्थिति लेआउट पर निर्भर करती है, आप केवल उस मॉड को छिपा सकते हैं / दिखा सकते हैं, जहाँ वह डोम को संशोधित करने के बजाय रखा गया है।
रॉड्रिगो

1
यह आशाजनक लग रहा था, लेकिन यह मेरे लिए काम नहीं करता था, एक अलग समाधान की कोशिश कर रहा था जो काम कर रहा था। stackoverflow.com/questions/7003707/…
बॉब

यदि आपके पास 2 XHRs हैं, और दूसरा शुरू होने के ठीक बाद पहला एक खत्म होता है, तो यह कोड लोडिंग संकेतक को छुपाता है, जबकि दूसरा XHR अभी भी चल रहा है।
मार्क ई। हासे

39

JQuery के दस्तावेज़ निम्नलिखित की तरह कुछ करने की सलाह देते हैं:

$( document ).ajaxStart(function() {
  $( "#loading" ).show();
}).ajaxStop(function() {
  $( "#loading" ).hide();
});

#loadingइसमें आपके व्यस्त संकेतक के साथ तत्व कहां है।

संदर्भ:

  • http://api.jquery.com/ajaxStart/
  • http://api.jquery.com/ajaxStop/

  • इसके अलावा, jQuery.ajaxSetupएपीआई स्पष्ट रूप से jQuery.ajaxSetupइनसे बचने की सलाह देता है :

    नोट: वैश्विक कॉलबैक कार्यों उनके संबंधित वैश्विक अजाक्स ईवेंट हैंडलर तरीकों के साथ स्थापित किया जाना चाहिए .ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()भीतर से -rather optionsके लिए वस्तु $.ajaxSetup()


1
ये पहले से अधिक उपयोगी और पूर्ण लगते हैं, क्योंकि ajaxStart होगा "... पहले अजाक्स अनुरोध शुरू होने पर हैंडलर को पंजीकृत करें" और ajaxStop शुरू होगा "... सभी अजाक्स अनुरोधों के पूरा होने पर एक हैंडलर को बुलाया जाए" - ये समवर्ती async संदेश संभालते हैं और समय से पहले "कृपया प्रतीक्षा करें" सूचक को छिपाते हैं।
खाई

10

मैं केवल एक IMG दिखाने / छिपाने के लिए हूं, जैसा कि अन्य ने कहा है। मुझे एक अच्छी वेबसाइट मिली जो "लोडिंग जिफ़" बनाती है

लिंक मैं बस इसे अंदर डाल देता हूं divऔर डिफ़ॉल्ट रूप से display: none;(सीएसएस) से छिपाता हूं, फिर जब आप फ़ंक्शन को कॉल करते हैं तो छवि दिखाते हैं, एक बार जब इसका पूरा फिर से छिप जाता है।


6

हाँ, यह वास्तव में केवल एक एनिमेटेड जिफ को दिखाने / छिपाने की बात है।


2
माना। छवि दिखाना / छिपाना सभी ब्राउज़रों द्वारा आसान और समझा जाता है। छवियों के लिए एक युगल jquery घुमाने वाले प्लगइन्स हैं, लेकिन वे सभी ब्राउज़रों में काम नहीं करेंगे।
माइक ब्लैंडफोर्ड

@ मेरा समाधान सभी ब्राउज़रों में मेरी परियोजना के लिए ठीक काम कर रहा है, क्या आपको लगता है कि अच्छा तरीका है
kobe

4

मैंने इसे अपनी परियोजना में किया था,

जिफ़ के रूप में बैक ग्राउंड यूआरएल के साथ एक डिव बनाते हैं, जो कि एनीमेशन जिफ के अलावा और कुछ नहीं है

<div class="busyindicatorClass"> </div>

.busyindicatorClass
{
background-url///give animation here
}

अपने ajax कॉल में, इस वर्ग को div में जोड़ें और ajax सफलता वर्ग को हटा दें।

यह चाल thatsitit करेगा।

मुझे बताएं कि अगर आपको किसी और चीज़ की ज़रूरत है, तो मैं आपको और जानकारी दे सकता हूं

में अजाक्स सफलता वर्ग को हटा दें

success: function(data) {
    remove class using jquery
  }

4

रोड्रिगो के समाधान को थोड़ा विस्तार देने के लिए - अक्सर अनुरोधों को निष्पादित करने के लिए, आप केवल लोडिंग छवि प्रदर्शित करना चाह सकते हैं यदि अनुरोध न्यूनतम समय अंतराल से अधिक समय लेता है, अन्यथा छवि लगातार पॉपिंग और जल्दी से गायब हो जाएगी।

var loading = false;

$.ajaxSetup({
    beforeSend: function () {
        // Display loading icon if AJAX call takes >1 second
        loading = true;
        setTimeout(function () {
            if (loading) {
                // show loading image
            }
        }, 1000);            
    },
    complete: function () {
        loading = false;
        // hide loading image
    }
});

3

मैंने इसे अपने प्रोजेक्ट में किया:

आवेदन में वैश्विक घटनाक्रम। जेएस:

$(document).bind("ajaxSend", function(){
   $("#loading").show();
 }).bind("ajaxComplete", function(){
   $("#loading").hide();
 });

"लोडिंग" दिखाने और छिपाने के लिए तत्व है!

संदर्भ: http://api.jquery.com/Ajax_Events/


3

मुझे इस्तेमाल करना था

HTML:
   <img id="loading" src="~/Images/spinner.gif" alt="Updating ..." style="display: none;" />

In script file:
  // invoked when sending ajax request
  $(document).ajaxSend(function () {
      $("#loading").show();
  });

  // invoked when sending ajax completed
  $(document).ajaxComplete(function () {
      $("#loading").hide();
  });

2

पुराना धागा, लेकिन मैं आज इस समस्या पर काम करने के बाद से अद्यतन करना चाहता था, मुझे अपनी परियोजना में jquery नहीं मिली, इसलिए मैंने इसे सादे पुराने जावास्क्रिप्ट तरीके से किया, मुझे स्क्रीन पर सामग्री को ब्लॉक करने की भी आवश्यकता थी ताकि मेरे xhtml में

    <img id="loading" src="#{request.contextPath}/images/spinner.gif" style="display: none;"/>

मेरी जावास्क्रिप्ट में

    document.getElementsByClassName('myclass').style.opacity = '0.7'
    document.getElementById('loading').style.display = "block";

"सादे पुराने जावास्क्रिप्ट तरीके" से आपका क्या मतलब है? क्या आप आगे बता सकते हैं? क्या आपका मतलब है कि आपने ए का इस्तेमाल किया है XMLHttpRequest?
ब्रायन पीटरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.