2009-03-02 7 views
16

मैं ASP.NET AJAX के साथ काम कर रहा हूँ और इन दो स्निपेट के बीच अंतर समझना चाहता हूँ:ASP.NET AJAX पृष्ठ लोड() और जावास्क्रिप्ट विंडो के बीच क्या अंतर है। डाउनलोड करें?

function pageLoad(sender, eventArgs) { } 

और

window.onload = function() { } 
  • वे एक ही कार्य करते हैं?
  • या किसी को दूसरे से पहले बुलाया जाता है?
  • या कोई स्वचालित रूप से कॉल किया जाएगा और दूसरा नहीं?

उत्तर

40

कुछ बातें पहले ध्यान दें। एमएस ने Sys.Application नामक "क्लाइंटसाइड रनटाइम ऑब्जेक्ट" का एक प्रकार का आविष्कार किया। यह इस प्रकार है, पृष्ठ के [clientside] जीवन भर init, load, और unload घटनाओं को ऊपर उठाने के हैंडल:

  1. Sys.Application.initialize() जीवन चक्र के init भाग शुरू होता है। यह initialize() सब clientside AJAX नियंत्रण, जिसके बाद वे तैयार हैं प्रोग्राम के
  2. Sys.Application शुरू होता है जीवन चक्र के load भाग से बातचीत की जा करने के लिए, सभी संचालकों कि
  3. अंत में इस घटना की सदस्यता ली है बुला, यह वैश्विक कॉल समारोह pageLoad (यदि कोई परिभाषित किया गया है)

चरण 2) और 3) हर आंशिक (यानी AJAX + UpdatePanel) पोस्टबैक के लिए दोहराया जाता है।

तो अंत में उत्तर: pageLoadSys.Application.add_load() पर एक आसान शॉर्टकट है।

साथ window.onload से इसके संबंध के संबंध

हालांकि, बातें दिलचस्प पाने के लिए शुरू करते हैं। अनिवार्य रूप से, एमएस आग केवल के बाद init चरण पूरा हो गया window.onload की जरूरत है। लेकिन आप नियंत्रित नहीं कर सकते जब ब्राउज़र, onload को सक्रिय कर देगा के रूप में यह "सामग्री भरी हुई" से जुड़ा हुआ है। यह "the window.onload problem" के रूप में जाना जाता है:

ऑनलोड घटना आग के बाद सभी पेज सामग्री (छवियों और अन्य द्विआधारी सामग्री सहित) लोड होना। अपने पेज छवियों के बहुत सारे शामिल है, तो आप एक ध्यान देने योग्य अंतराल देख सकते हैं इससे पहले कि पेज सक्रिय हो जाता है।

तो, उन्होंने अभी अपने स्वयं के "विशेष" फ़ंक्शन का आविष्कार अपने ईवेंट जीवन चक्र में सही समय पर आग लगाने के लिए किया और इसे "pageLoad" कहा। और यह चाल जो उन्होंने इस कस्टम इवेंट लाइफ चक्र को किकऑफ करने के लिए उपयोग की थी, place the call to Sys.Application.initialize() just before the closing </form> tag थी। सर्वरसाइड रनटाइम यह करता है। चतुर पाठकों नोट करेंगे कि इस चाल, के बाद से किसी भी कोड आप pageLoad में डाल द्विआधारी सामग्री (w/ one rare catch for IE) के स्वतंत्र सक्रिय कर देगा एमएस window.onload समस्या को हल करने की अनुमति दी।

> क्या वे वही कार्य करते हैं?

अवधारणात्मक हां, अभ्यास में window.onload समस्या के कारण बिल्कुल नहीं। एकमात्र नियम यह है कि आपको pageLoad में केवल अपने AJAX नियंत्रणों से कोड करना चाहिए, क्योंकि window.onload अपने स्वयं के ईवेंट प्रक्षेपवक्र का पालन करता है।

> या किसी को दूसरे से पहले बुलाया जाता है?

वे पूरी तरह से 100% स्वतंत्र हैं।

> या कोई स्वचालित रूप से कॉल किया जाएगा और दूसरा नहीं?

यदि आप उन्हें परिभाषित करते हैं तो वे दोनों को बुलाया जाएगा।

+1

आपका उत्तर पूरा हो गया है, लेकिन मेरे पास पेज लोड के साथ एक और समस्या है, जब मैंने अपने पेज में रखा तो मुझे पता चला कि इसे स्वचालित रूप से बुलाया जाता है और कहा जाता है, ध्यान दें: मेरे पास टेलरिक है: पृष्ठ पर RadAjaxManager, इसलिए यह एक त्रुटि के कारण है ऐसा हो रहा है या इसे सामान्य रखने के लिए सामान्य है "जैसा कि इसे टाइमर द्वारा बुलाया जाता है"? –

+1

अच्छा लिखना +1 - समाधान बहुत हंसते हुए माइक्रोसॉफ्ट – annakata

+0

@amrelgarhy: मेरा अद्यतन उत्तर देखें: चरण 2) और 3) प्रत्येक आंशिक (यानी AJAX + UpdatePanel) पोस्टबैक पर कॉल किए जाते हैं। –

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