मुझे एक समस्या और समाधान था जिसके लिए mootools में निर्मित कार्यक्षमता की आवश्यकता थी। इसलिए मैंने इसे विच्छेदन करना शुरू कर दिया। वहाँ एक समारोह है जिसमें मुझे दिलचस्पी है IframeShim.destroy ऐसी बात हे

destroy: function(){
        if (this.shim) this.shim.destroy();
        return this;
    }

अब मैं इसमें क्या नहीं समझ सकता shim क्या है। विशेष रूप से जो मैं समझने की कोशिश कर रहा हूं वह है Request.JSONP.cancel इसका कोड इस प्रकार है

cancel: function(){
        if (this.running) this.clear().fireEvent('cancel');
        return this;
    }

अब यह कैंसिल कॉल clear जिसका कोड इस प्रकार है

clear: function(){
        this.running = false;
        if (this.script){
            this.script.destroy();
            this.script = null;
        }
        return this;
    }

अब इस स्पष्ट कार्य में मैं destroy() देख सकता हूं जो मुझे shim पर ले जाता है (शीर्ष पर कोड देखें) और मैं अटक गया हूं। ये सभी कार्य mootools-more.js में हैं

मदद?

यह बहुत अच्छा होगा यदि कोई Request.JSONP.cancel . का एक सादा जावास्क्रिप्ट कार्यान्वयन प्रदान कर सके क्या इसका कोई JQuery विकल्प है?

0
lovesh 29 जुलाई 2011, 13:12

1 उत्तर

सबसे बढ़िया उत्तर

जिस विनाश को Request.JSONP.clear विधि द्वारा बुलाया जा रहा है वह IframeShim.destory नहीं है, यह mootools कोर का हिस्सा है। यहाँ स्रोत है:

destroy: function(){
    var children = clean(this).getElementsByTagName('*');
    Array.each(children, clean);
    Element.dispose(this);
    return null;
},

केवल Element.dispose देशी jasvascript DOM मेथड को Node.removeChild जो डीओएम से एक तत्व को हटा देता है।

तो सभी JSONP.cancel यह देख रहा है कि क्या कोई स्क्रिप्ट DOM नोड Request.JSONP.cancel के माध्यम से जोड़ा गया था। यदि ऐसा था, तो यह स्क्रिप्ट तत्व को DOM से removeChild के माध्यम से हटा देता है।

महत्वपूर्ण बात यह है कि इसने running ध्वज को असत्य पर सेट किया है। यदि आप Request.JSONP.success को देखते हैं, तो यह आपके कॉलबैक फ़ंक्शन को कॉल करने से पहले सबसे पहले यह जांचता है कि क्या running ध्वज गलत पर सेट है, और यदि ऐसा है, तो यह तुरंत वापस आ जाता है। यह प्रभावी रूप से निष्पादन को "रद्द" करता है।

यदि आपका मतलब है कि यह HTTP अनुरोध को रद्द करता है, तो उत्तर नहीं है, ऐसा नहीं है।

1
Philip Ramirez 29 जुलाई 2011, 17:10
धन्यवाद, +1। क्या किसी नोड पर destroy() को कॉल करना नोड द्वारा किए गए किसी भी http अनुरोध को रद्द कर देता है। यदि आप मेरा मतलब नहीं समझते हैं तो कृपया देखें यह
 – 
lovesh
29 जुलाई 2011, 16:19
क्या इसका मतलब यह है कि Request.JSONP.cancel HTTP अनुरोध को रद्द नहीं कर सकता है?
 – 
lovesh
29 जुलाई 2011, 16:27
नहीं, यह HTTP अनुरोध को रद्द नहीं करता है। यह क्या करता है कि यह स्क्रिप्ट लोड होने के बाद कॉलबैक को निष्पादित करने से रद्द कर देता है।
 – 
Philip Ramirez
29 जुलाई 2011, 17:05
1
नोटिस Request.JSONP.send में उन्होंने src को विकल्प + callback=Request.JSONP.request_map.request_'+ index में पारित URL के रूप में सेट किया है। यह इसे एक मैप किए गए Request.JSONP.success से जोड़ता है, जो निष्पादित करने से पहले, पहले जांचता है कि यह चल रहा है या नहीं, और यदि यह है, तो तुरंत लौटाता है और इस प्रकार इसे "रद्द" करता है (क्योंकि असाइन किया गया कॉलबैक कभी निष्पादित नहीं होगा)।
 – 
Philip Ramirez
29 जुलाई 2011, 17:07