अन्य उत्तरों में से अधिकांश उत्तर दे रहे हैं कि इसका समाधान कैसे करें। मैं बहुत संक्षिप्त रूप से देखना चाहता हूं, पर इस मामले में एसिंक्रोनस अच्छा है।
वास्तव में, ब्राउज़र में अधिकांश जावास्क्रिप्ट असीमित है। उदाहरण के लिए, इस कोड को लें:
document.getElementById('foo').onclick = function() {
alert('foo clicked');
};
document.getElementById('bar').onclick = function() {
alert('bar clicked');
};
कौन सा पहले भाग जाएगा? आप ब्राउज़र मॉडल (या वास्तव में अधिकांश घटना-संचालित कोड) के अंतर्निहित असिंक्रोनिटी के कारण नहीं जानते हैं। जब कोई ईवेंट होता है तो आप कोड चलाते हैं। आपने दस्तावेज़ स्थापित किया है, फिर घटना होने की प्रतीक्षा करें, और आपके कोड को सभी प्रकार के विभिन्न आदेशों में निष्पादित किया जा सकता है, इस पर निर्भर करता है कि पहले कौन सी घटनाएं होती हैं। पृष्ठ के पूरे जीवनकाल के दौरान जावास्क्रिप्ट कोड को निष्पादित करने की आवश्यकता होती है, न कि जब यह पहली बार बनाई जाती है।
तो सामान्य जावास्क्रिप्ट प्रोग्रामिंग (या कम से कम, जावास्क्रिप्ट प्रोग्रामिंग सबसे सरल स्तर से परे) अक्सर असीमित होने जा रहा है। इसके अलावा, यह HTTP अनुरोधों के लिए असीमित होने के लिए भी बहुत समझदारी बनाता है।
सबसे पहले, जैसा कि आप अपने प्रश्न में अंतर्निहित करते हैं, कोड सिंक्रोनस निष्पादन को अवरुद्ध कर देगा। ऐसा कहने के लिए, शायद आप एनीमेशन को शुरू करने के लिए दो सेकंड इंतजार नहीं करना चाहते हैं क्योंकि आप एक HTTP अनुरोध दो लाइनों को आगे बढ़ा रहे हैं। सर्वर प्रतिक्रिया समय (ए) अनियमित और (बी) धीमा हो सकता है, इसलिए आपके सर्वर के प्रतिक्रिया की गति पर निर्भर होने के लिए आपके आवेदन के डिज़ाइन के लिए कोई समझ नहीं आता है।
दूसरा, और सबसे महत्वपूर्ण बात यह है कि आपका उपयोगकर्ता पृष्ठ का उपयोग करना बंद नहीं करेगा क्योंकि आपकी स्क्रिप्ट एक AJAX कॉल कर रही है। आपके उपयोगकर्ता परवाह नहीं है। आपका उपयोगकर्ता शायद इस बात की परवाह करेगा कि आपका सामान्य onscroll
व्यवहार काम नहीं कर रहा है क्योंकि आपकी स्क्रिप्ट वर्तमान में एक असंबंधित AJAX अनुरोध से जुड़ी हुई है। संपूर्ण ब्राउज़र जावास्क्रिप्ट प्रोग्रामिंग की असीमित प्रकृति के साथ जुड़ने के लिए, HTTP कॉल का विशाल बहुमत गैर-अवरुद्ध, असीमित होना चाहिए।
'AJAX' में पहला' ए' एसिंक्रोनस के लिए है। – Gareth
आप विकल्प 'async: true' सेट कर सकते हैं। अनुरोध सक्रिय होने पर सिंक्रोनस अनुरोध अस्थायी रूप से ब्राउज़र को लॉक कर सकते हैं, किसी भी क्रिया को अक्षम कर सकते हैं। सिफारिश नहीं की गई। – jasssonpet
@ गैरेथ मुझे पता था कि ए असीमित के लिए खड़ा था, हालांकि मैंने हमेशा सोचा था कि यह इस तथ्य का जिक्र कर रहा है कि अनुरोध पृष्ठ को 'पुनः लोड करने' के बिना किया गया है, यानी 'पैरेंट' http अनुरोध फिर से बनाना, इसलिए पृष्ठ तब है पृष्ठ को वितरित करने वाले मूल http अनुरोध के साथ 'सिंक्रनाइज़ नहीं'। इस प्रश्न के लिए – rgvcorley