2010-02-02 14 views
7

परिदृश्य इस तरह है: मैं कुछ AJAX सुविधाओं को लागू करने के लिए Jquery का उपयोग कर रहा हूं। उदाहरण के लिए: जब कोई उपयोगकर्ता "डेटा प्राप्त करें" बटन पर क्लिक करता है, तो Jquery सर्वर से कुछ डेटा लाने के लिए .ajax फ़ंक्शन को कॉल करेगा। इस प्रक्रिया में कुछ समय लग सकता है, इसलिए मैंने प्रतीक्षा प्रक्रिया के लिए कुछ एनीमेशन दिखाने के लिए .ajaxSend और .ajax पूर्ण कार्यों को जोड़ा (वास्तव में जेड-इंडेक्स के साथ एक div के अंदर एक 'लोडिंग डेटा' gif: 999 के अंदर अन्य divs के शीर्ष होने के लिए)। प्रतीक्षा प्रक्रिया ('लोडिंग डेटा') के दौरान, मैं उपयोगकर्ताओं को अन्य बटनों पर क्लिक करने से रोकना चाहता हूं (उदाहरण के लिए: मेरे पास अन्य टैब हैं, छोटे 'लोडिंग डेटा' gif के नीचे बटन)। तरह से मैं यह लक्ष्य प्राप्त कर रहा है:AJAX की प्रतिक्रिया के लिए प्रतीक्षा करते समय उपयोगकर्ताओं की बातचीत को कैसे रोकें

$("body").ajaxSend(function() 
    { 
     $(this).append('<div id="loading">Data Loading<\/div>'); 
     $("div#error").remove(); 
     $(this).children().not('#loading').css({'opacity':0.22}); 
    }); 
    $("body").ajaxComplete(function() 
    { 
     $("div#loading").remove(); 
     $(this).children().not('#loading').css({'opacity':1}); 
    }); 

हालांकि, मुझे नहीं लगता कि अस्पष्टता को बदलने का सबसे अच्छा तरीका है। जब तक आप अस्पष्टता 0 तक नहीं बनाते, तब भी उपयोगकर्ता अन्य बटन/टैब पर क्लिक कर सकते हैं। मुझे नहीं पता कि इस प्रक्रिया के दौरान किसी भी उपयोगकर्ता इंटरैक्शन से पूरी तरह से कैसे बचें? धन्यवाद!!

उत्तर

5

ओवरले का उपयोग करें।

http://jqueryui.com/demos/dialog/#modal

+0

असल में, मैं JqueryUI का भी उपयोग कर रहा हूं। हां, मैंने अभी संवाद के मोडल विकल्प का प्रयास किया है। ब्लॉक प्रभाव को हासिल करना आसान है। हालांकि, क्या संवाद के ऊपरी दाएं कोने पर क्रॉस-ओवर (क्लोज़ बटन) को हटाने के लिए कोई रास्ता है? – WilliamLou

+0

यह http://stackoverflow.com/questions/896777/remove-close-button-on-jqueryui-dialog –

+0

धन्यवाद देखें। मैंने इसे अपने उत्तर के रूप में चुना क्योंकि मैंने पहले से ही JqueryUI का उपयोग किया है ताकि मुझे केवल ब्लॉकयूआई प्रभाव – WilliamLou

5

कुछ और ऊपर एक z- सूचकांक के साथ दिखाई दे एक div करें। अशुभ, इसे छुपाएं।

IE6 के लिए, चयन आदानों

+0

के लिए एक और प्लगइन आयात करने की आवश्यकता न हो, मैं चाहता हूं कि मैं ऊपर उठा सकूं (लेकिन मैं अगले कुछ घंटों के लिए बाहर हूं), खासकर आईई 6 की चेतावनी के लिए और तत्वों का निर्माण करें। – Sampson

6

मैंने पहले भी अच्छा सफलता के साथ jQuery ब्लॉक यूआई का उपयोग किया है की दृश्यता पर विचार करें। अजाक्स के साथ अच्छी तरह से काम करता है:

http://malsup.com/jquery/block/

इस जैसे एक प्लगइन का उपयोग कर के बजाय एक ऐसी ही समाधान handcoding ...

+0

अच्छी तरह से, यह प्लगइन इस उद्देश्य के लिए अच्छा काम करता है, लेकिन मैं इस चरण में बहुत से प्लगइन आयात नहीं करना चाहता हूं। फिर भी धन्यवाद। अगर मुझे कोई आसान समाधान नहीं मिल रहा है, तो मैं बाद में ब्लॉकयूआई में बदल सकता हूं। – WilliamLou

0

मैं Ben Nadel's ajax pipeline पर एक संस्करण का उपयोग करता हूं। अनिवार्य रूप से वह एक ऑब्जेक्ट के साथ jQuery $ .ajax कॉल को लपेटता है जो आउटगोइंग AJAX अनुरोध रिकॉर्ड कर सकता है।

जब कोई AJAX अनुरोध निकलता है, तो आप अनुरोध का नाम रिकॉर्ड करते हैं। यदि कोई और अनुरोध उसी नाम से बाहर निकलने का प्रयास करता है, तो आप इसे निष्पादित नहीं करते हैं (वैकल्पिक रूप से उपयोगकर्ता को संदेश प्रदान करते हैं)।

0

मैं एक समान प्रश्न का उत्तर पाने की कोशिश कर रहा था और मैं यहां समाप्त हुआ। मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं यह जानना चाहता हूं कि उन तत्वों पर एक ओवरले रखा गया है जिन्हें आप बातचीत से रोकना चाहते हैं, ब्राउज़र निरीक्षक के माध्यम से आसानी से हटाया जा सकता है।

ऐसा लगता है कि इस मामले तक पहुंचने का सबसे अच्छा तरीका या तो पूरे पृष्ठ के लिए वैश्विक बूलियन वैरिएबल स्थापित करना है और पेज पर क्रियाएं निष्पादित करना जब AJAX चल रहा है (कम से कम संवेदनशील क्रियाएं) या बस वास्तव में इस परिदृश्य में अजाक्स के लिए एसिंक्रोनस कॉल को बंद करना आपको इसकी आवश्यकता नहीं है (हालांकि मुझे पता है कि कुछ लोग मुझे यह कहने के लिए क्रूस पर चढ़ाएंगे)।

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