2011-01-26 9 views
5

ये विधियां जो ध्यान में आती हैं, प्रत्येक के पेशेवर और विपक्ष क्या हैं?मैं XMLHttpRequest wrapper/प्रॉक्सी कैसे बना सकता हूं?

विधि 1: में वृद्धि देशी उदाहरण

var _XMLHttpRequest = XMLHttpRequest; 
XMLHttpRequest = function() { 
    var xhr = new _XMLHttpRequest(); 

    // augment/wrap/modify here 
    var _open = xhr.open; 
    xhr.open = function() { 
     // custom stuff 
     return _open.apply(this, arguments); 
    } 

    return xhr; 
} 

विधि 2: उप "वर्ग" देशी XMLHttpRequest

var _XMLHttpRequest = XMLHttpRequest; 
XMLHttpRequest = function() { 
    // definePropertys here etc 
} 

XMLHttpRequest.prototype = new _XMLHttpRequest()); 
// OR 
XMLHttpRequest.prototype = Object.create(_XMLHttpRequest); 

// custom wrapped methods on prototype here 
XMLHttpRequest.prototype.open = function() { 
    // custom stuff 
    return _XMLHttpRequest.prototype.open.apply(this, arguments); 
} 

विधि 3: देशी XMLHttpRequest

var _XMLHttpRequest = XMLHttpRequest; 
XMLHttpRequest = function() { 
    this.xhr = new _XMLHttpRequest(); 
} 

// proxy ALL methods/properties 
XMLHttpRequest.prototype.open = function() { 
    // custom stuff 
    return this.xhr.open.apply(this.xhr, arguments); 
} 
+0

आपकी पहली विधि मेरे लिए गलत लगती है। मुझे डर है कि जब तक आप स्टैक ओवरफ़्लो प्राप्त नहीं करेंगे तब तक आप एक रिकर्सिव लूप में आ जाएंगे। ;) और आप इसे वैसे भी क्यों चाहते हैं? बहुत सारे neater समाधान हैं, जिन्हें एक संदर्भित वस्तु को फ़ंक्शन कॉल प्रदान करने की आवश्यकता नहीं है। –

+0

मार्सेल: आप सही हैं, यह एक प्रकार था, मैंने इसे ठीक कर दिया है। – tlrobinson

+3

ThiefMaster: मेरे अधिकांश प्रश्नों का पर्याप्त उत्तर कभी नहीं दिया जाता है ... – tlrobinson

उत्तर

2

निर्भर करता है के लिए पूर्ण प्रॉक्सी जेएस इंजन पर, विधि 1 काफी ऊपरी उत्पादन करता है, क्योंकि xhr.open है जब भी एक्सएचआर तत्काल होता है तो फिर से परिभाषित किया जाता है।

विधि 2 मुझे लगता है कि "तुम क्यों पहली जगह में new _XMLHttpRequest की आवश्यकता होगी" बनाता है? अवांछित साइड इफेक्ट्स की मामूली भावना है, लेकिन ऐसा लगता है कि यह ठीक काम करता है।

विधि 3: सरल, पुराना स्कूल, लेकिन यह सीधे काम नहीं करेगा। (पढ़ने के गुण के बारे में सोचो)

सामान्य तौर पर, मैं व्यक्तिगत रूप से अनिच्छुक हूँ जब यह ब्राउज़र वस्तुओं को अधिलेखित करने की बात आती है, तो यह है कि तीनों विधियों के लिए एक बड़ा चोर होगा। बेहतर ProxyXHR जैसे कुछ अन्य चर (सिर्फ मेरी 2 सेंट)

0

यह उपयोग के मामले पर निर्भर हो सकता का उपयोग करें। मेरे मामले में मैं एक पूर्ण प्रॉक्सी बनाना चाहता था जो तीसरी विधि के साथ ही संभव है। समस्या यह है कि onreadystatechange को मूल XHR कार्यान्वयन पर सेट करने की आवश्यकता है। मुझे लगता है कि गेटटर और सेटर परिभाषित हैं जिन्हें बाहर से बदला नहीं जा सकता है।

इस विधि के कारण 1 और 2 काम नहीं करेगा। इसे प्राप्त करने के लिए मैंने एक पूर्ण लिखा, जिसका अर्थ है कि मुझे कोई भी बग नहीं मिला, यहां एक्सएचआर के लिए प्रॉक्सी: A: How can I catch and process the data from the XHR responses using casperjs?। , SXH_PROXY_SET_DEFAULT, SXH_PROXY_SET_DIRECT, SXH_PROXY_SET_PROXY SXH_PROXY_SET_PRECONFIG

varProxyServer -: - प्रॉक्सी कॉन्फ़िगरेशन पूर्व proxySetting: यह विधि 3.

0

उपयोग नीचे config

_XMLHTTPRequest.setProxy(proxySetting, varProxyServer, varBypassList);

पैरामीटर विवरण के साथ किया जाना चाहिए एक प्रॉक्सी सर्वर के नाम

varBypassList - होस्ट नाम या whi के लिए IP पते ch आप प्रॉक्सी सर्वर के बाईपास को अनुमति देना चाहते हैं।

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