2010-12-11 16 views
34

जिसका उपयोग उस समय किया जाना है।jquery :: AJAXStop() बनाम jquery :: AJAXComplete()

http://api.jquery.com/ पर दस्तावेज़ीकरण में:

ajaxStop के लिए() यह कहते हैं:

विवरण: एक हैंडलर जब सभी अजाक्स अनुरोध पूरा कर लिया है के नाम से जाना रजिस्टर। यह एक अजाक्स घटना है।

और ajaxComplete() यह कहता है के लिए:

विवरण: जब अजाक्स अनुरोध पूरा नाम से जाना रजिस्टर हैंडलर। यह एक अजाक्स घटना है। सभी ajaxComplete संचालकों लागू कर रहे हैं, क्या Ajax अनुरोध पूरा कर लिया गया की परवाह किए बिना

:

मैं ajaxComplete क्या देख सकते हैं से() की वजह से अधिक लचीला है। अगर हमें अनुरोधों के बीच अंतर करना होगा, तो हम हैंडलर को पारित पैरामीटर का उपयोग कर सकते हैं। प्रत्येक बार जब AJAX पूर्ण हैंडलर निष्पादित किया जाता है, तो यह ईवेंट ऑब्जेक्ट, XMLHttpRequest ऑब्जेक्ट, और सेटिंग्स ऑब्जेक्ट को पास किया जाता है जो अनुरोध के निर्माण में उपयोग किया जाता था।

क्या कोई बता सकता है कि प्रत्येक के लिए क्या है और प्रत्येक के लिए उचित उपयोग क्या है। एक एप्लिकेशन में मैंने हाल ही में बनाया है जब मैं AJAXStop() पर आग लगाता हूं जब मेरी AJAX कॉल समाप्त हो जाती है। मैं सर्वर साइड ऑपरेशन के परिणामस्वरूप लौटाए गए डेटा को पार्स कर दूंगा। अब मुझे आश्चर्य हो रहा है कि क्या मुझे AJAXComplete() या विभिन्न स्थितियों के लिए दोनों का संयोजन इस्तेमाल करना चाहिए था।

विचारों की सराहना की जाती है।

+0

मुझे पता नहीं लगा कि मुझे त्रुटि क्यों मिल रही है 'AJAX पूर्ण कार्य नहीं है'। सुनिश्चित करें कि jQuery के 'स्लिम' संस्करण का उपयोग न करें: https://stackoverflow.com/a/35424465/470749 – Ryan

उत्तर

54

खैर, लघु संस्करण वे विभिन्न प्रयोजनों की सेवा है, इसलिए जवाब विकल्प "एक विभिन्न स्थितियों के लिए दोनों के संयोजन" होगा। बुनियादी नियम हैं:

  • .ajaxComplete() - हर अनुरोध कि पुरा होने के चलाता है, इस का उपयोग जब आप प्रत्येक अनुरोध/परिणाम के साथ कुछ करना चाहता हूँ। ध्यान दें कि यह success हैंडलर को प्रतिस्थापित नहीं करता है, क्योंकि पार्स किए गए डेटा तर्कों में से एक नहीं है (और यह त्रुटि होने पर भी चलता है) - आप इसके बजाय कुछ प्रति-अनुरोध स्थितियों में .ajaxSuccess() चाह सकते हैं।
  • .ajaxStop() - रन जब अनुरोध के हर बैच पूरा करता है, आम तौर पर आप इस संयोजन में .ajaxStart() साथ दिखा/एक छुपा जैसी चीजों के लिए उपयोग करना चाहते हैं "लोड हो रहा है ..." किसी प्रकार की सूचक - या एक बार एक कुछ और करने AJAX अनुरोधों का बैच समाप्त होता है, एक मास्टर अंतिम चरण की तरह।

आप अपने डेटा पार्स करने के लिए इस का उपयोग कर रहे हैं, तो शायद एक बेहतर तरीका है, इस मामले $.ajaxSetup(), में जहाँ आप एक success हैंडलर कि पहले से ही-पार्स डेटा हो जाता है निर्दिष्ट कर सकते हैं (उदाहरण के लिए JSON प्रतिक्रियाओं वस्तुओं हो जाएगा) , इस तरह:

$.ajaxSetup({ 
    success: function(data) { 
    //do something with data, for JSON it's already an object, etc. 
    } 
}); 
+0

मुझे AJAX सफलता कॉल मिलता है। मुझे AJAXStop बनाम पूर्ण उपयोग कब करना चाहिए। – Chris

+8

@Chris - '.ajaxStop() 'आग लगती है जब अनुरोधों का एक बैच पूरा हो जाता है, जिसका अर्थ है कि अगर आप 5 आग लगते हैं, इससे कोई फर्क नहीं पड़ता कि वे किस क्रम में वापस आते हैं, यह 5 वां पूरा होने पर आग लगती है, इसलिए कोई AJAX अनुरोध परिणाम के लिए इंतजार नहीं कर रहा है उस बिंदु पर, आप कर रहे हैं। इसका मतलब है कि इसे पूरा किए गए विशिष्ट अनुरोध के बारे में कोई जानकारी नहीं है, क्योंकि यह * अनुरोध के लिए नहीं था, यह उन सभी के लिए था। 'AJAXComplete' प्रत्येक * अनुरोध के लिए * प्रत्येक के लिए 'XMLHttpRequest' ऑब्जेक्ट' के साथ आग लगती है ... इसलिए आपके पास सौदा करने के अनुरोध के बारे में कुछ जानकारी है ... यह सब उस पर निर्भर करता है जो आप वास्तव में कर रहे हैं । –

+0

धन्यवाद, यह समझ में आता है। – Chris

7

ajaxComplete को जब भी अजाक्स अनुरोध समाप्त होता है, या तो सफलतापूर्वक या त्रुटि के साथ कहा जाता है।

ajaxStop को सभी AJAX अनुरोध पूर्ण होने पर कहा जाता है। तो ajaxComplete के विपरीत, यदि अभी भी प्रगति पर कोई अनुरोध है तो इसे नहीं कहा जाएगा।

यदि आप ऑपरेशन करना चाहते हैं तो आपको पहले एजेक्स अनुरोध के लिए किया जाना चाहिए।

3

सामान्य रूप से, आप ajaxComplete का उपयोग करना चाहते हैं। ऐसा इसलिए है क्योंकि ajaxStop केवल तभी ट्रिगर किया जाएगा जब कोई और AJAX अनुरोध अभी भी वापस आने का इंतजार नहीं कर रहा है। जब आप एक समय में एक AJAX अनुरोध भेज रहे हों तो यह अलग प्रतीत नहीं हो सकता है, लेकिन कल्पना करें कि अनुरोध ए भेजने के बाद नेटवर्क धीमा हो गया है, और जब अनुरोध बी को 5 सेकंड बाद भेजा जाता है तो यह अनुरोध ए से पहले वापस आता है .. तो ajaxStop अनुरोध के बाद केवल एक बार ट्रिगर किया जाएगा जबकि ajaxComplete दोनों बार आग लग जाएगी।

स्थिति जहां आप ajaxStop का उपयोग करेंगे, वह तब होता है जब आप एक बार में एकाधिक AJAX अनुरोध भेजते हैं ... उदा। 3 रूपों की श्रृंखला प्रस्तुत करने के लिए ... और सभी 3 पूर्ण सफलतापूर्वक पूर्ण होने पर अधिसूचित होना चाहते हैं। बेशक, आप ajaxComplete

हालांकि काउंटर के साथ समान कार्यक्षमता प्राप्त कर सकते हैं, हालांकि, आपके प्रश्न की आवाज़ से ... आप प्रत्येक AJAX प्रतिक्रिया से डेटा पार्स करना चाहते हैं ... आमतौर पर यह किया जाएगा AJAX सफलता कॉलबैक, उदाहरण के लिए

$.ajax({ 
    url: "blah", 
    data: "blah", 
    success: function (data) { /* Code in here */ } 
}); 
संबंधित मुद्दे