2009-04-16 13 views
5

मुझे ऐसा होने पर सूचित करने के लिए आईई AJAX अनुरोध को लपेटने की आवश्यकता है। यानी मुझे यह जानने की जरूरत है कि इस पर खुले कब कहा जाता है:ActiveXObject जेएस कन्स्ट्रक्टर को कैसे संशोधित करें?

var xhr = new ActiveXObject ("Microsoft.XMLHTTP");

ऐसा करने का एकमात्र तरीका (मुझे लगता है) वास्तविक कन्स्ट्रक्टर/ऑब्जेक्ट को प्रॉक्सी ओपन कॉल के लिए ActiveXObject कन्स्ट्रक्टर को कार्यान्वित करना है। क्या आप मुझे ऐसा करने में मदद कर सकते हैं?

भी: मुझे वास्तविक xhr ऑब्जेक्ट बनाने की आवश्यकता नहीं है, इसलिए कृपया मुझे एक्स फ्रेमवर्क का उपयोग करने के लिए न कहें क्योंकि यह आसान है।

मुझे यह जानने की जरूरत है कि खुले को एमएस एक्सएचआर ऑब्जेक्ट पर (मेरे कोड द्वारा नहीं) कहा जाता है।

बहुत बहुत धन्यवाद!

उत्तर

3

के बाद से ओपी एक समान प्रश्न पोस्ट किया गया है, और मैं एक जवाब जो भी इस सवाल फिट करने के लिए होता है तैनात है, वह मुझसे पूछा बजाय इसे यहाँ दोहराने की, मेरा उत्तर से जोड़ने के लिए।

-1

मैं आपको AJAX के लिए jQuery का उपयोग करने की सलाह देता हूं। यह बहुत छोटा है लेकिन बहुत लचीला और तेज़ ढांचा है। docs here देखें।

+0

मैं कोड है कि अन्य लोगों के कोड में प्लग होगा (एक बुकमार्कलेट की तरह कुछ) पर काम कर रहा हूँ। मैं नहीं जानता कि उन्होंने किस ढांचे का उपयोग किया है, लेकिन मुझे AJAX घटनाओं को पकड़ने की आवश्यकता है। – mkoryak

2

शायद आप कुछ इस तरह की कोशिश कर सकते हैं:

XMLHttpRequest.prototype.real_open = XMLHttpRequest.prototype.open; 

var your_open_method = function(sMethod, sUrl, bAsync, sUser, sPassword) { 
    alert('an XHR request has been made!'); 
    this.real_open(sMethod, sUrl, bAsync, sUser, sPassword); 
} 

XMLHttpRequest.prototype.open = your_open_method; 
बेशक

, चेतावनी के बजाय आप अपना ही ट्रैकिंग कोड हो सकता है। मैंने इसे आजमाया और यह 'सादे जावास्क्रिप्ट' अनुरोधों और jquery के साथ किए गए अनुरोधों पर भी काम करता है। मुझे लगता है कि यह अनुरोध करने के लिए इस्तेमाल किए गए ढांचे के बावजूद काम करना चाहिए।

अप्रैल 21 संपादित करें मुझे नहीं पता कि ActiveXObject को कैसे बढ़ाया जा सकता है। मेरा अनुमान है कि कुछ इस तरह काम करना चाहिए है:

XHR = new ActiveXObject("Microsoft.XMLHTTP"); 
var XHR.prototype.old_open = XHR.prototype.open; 
var new_open = function(sMethod, sUrl, bAsync, sUser, sPassword) { 
    alert('an IE XHR request has been made!'); 
    this.old_open(sMethod, sUrl, bAsync, sUser, sPassword); 
} 

XHR.prototype.open = new_open; 

दुर्भाग्य से (या शायद नहीं) मैं IE की जरूरत नहीं है, इसलिए मैं यह परीक्षण नहीं कर सकते। लेकिन इसे एक स्पिन दें और मुझे यह बताएं कि क्या यह चाल है।

+0

बीमार कोशिश करें। बीमार शायद फ़ायरबॉक्स एक्सएचआर कार्यान्वयन के लिए एक और आईई के लिए एक बनाने की जरूरत है।धन्यवाद – mkoryak

+0

apr 21: मैंने कोशिश की है, यह काम नहीं करता है क्योंकि "प्रोटोटाइप शून्य है या ऑब्जेक्ट नहीं है" आईई का दावा है। मुझे लगता है कि यह वास्तविक जावास्क्रिप्ट ऑब्जेक्ट नहीं है, लेकिन कुछ ActiveX उत्परिवर्ती चीज है। मुझे लगता है कि जाने का तरीका ActiveXObject कन्स्ट्रक्टर को प्रॉक्सी ऑब्जेक्ट बनाने के लिए संशोधित करना है – mkoryak

+1

मुझे लगता है कि आप ActiveXObject पर सही हैं जो वास्तविक जावास्क्रिप्ट ऑब्जेक्ट नहीं लौट रहे हैं। मुझे डर है कि मैं इसे विस्तारित करने में आपकी सहायता नहीं कर सकता। शुभकामनाएं, और स्थिति को अद्यतन रखना जारी रखें, यदि आप कर सकते हैं। – andi

1

"वास्तविक वस्तु को पाने के लिए" कुछ भी नहीं है, यह वास्तविक वस्तु है!

ध्वनि आप देख रहे हैं की तरह इस आदमी की तरह कुछ कर रही है के लिए ....

http://www.adobepress.com/articles/article.asp?p=439600

document.write("<script type=\"text/javascript\" src=\"js/HTTP.js\"></script>"); 

function Ajax() 
{ 
    this.toString = function() { return "Ajax"; } 
    this.http = new HTTP(); 

    this.makeRequest = function(_method, _url, _callbackMethod) 
    { 
    this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP"); 
    this.request.onreadystatechange = _callbackMethod; 
    this.request.open(_method, _url, true); 
    this.request.send(_url); 
    } 

    this.checkReadyState = function(_id, _1, _2, _3) 
    { 
    switch(this.request.readyState) 
    { 
     case 1: 
     document.getElementById(_id).innerHTML = _1; 
     break; 
     case 2: 
     document.getElementById(_id).innerHTML = _2; 
     break; 
     case 3: 
     document.getElementById(_id).innerHTML = _3; 
     break; 
     case 4: 
     return this.http.status(this.request.status); 
    } 
    } 
} 
+0

मैं AJAX का उपयोग करने का तरीका जानने का प्रयास नहीं कर रहा हूं, मैं यह पता लगाने की कोशिश कर रहा हूं कि एचएक्सआर ऑब्जेक्ट में सभी कॉल को कैसे रोकें, इस पर ध्यान दिए बिना कि किस फ्रेमवर्क (या कोई ढांचा नहीं) इसे – mkoryak

+0

के माध्यम से बुलाया गया था ठीक है, अच्छी तरह से आधार प्रकारों को ओवरराइड करना है आपदा के लिए एक नुस्खा लेकिन यदि आप अभी भी ऐसा करना चाहते हैं, तो आपको किसी भी तरह से पूरे ActiveXObject और XHR को दो क्लास रैपर में ओवरराइट करना होगा और कॉल को इस तरह से रोकना होगा। काम के बहुत सारे;) ActiveXObject.prototype.constructor = समारोह (PROGID) {} गुड लक –

0

यह हमेशा मेरे लिए काम किया है।

var xmlHttp; 

function yourajaxfunction(str) 
{ 
    xmlHttp=GetXmlHttpObject(); 
    if (xmlHttp==null){ 
     alert ("Browser does not support HTTP Request"); 
     return; 
    } 

    var url="yourserversidecodefile.php"; 
    url=url+"?q="+str; 

    xmlHttp.onreadystatechange=stateChanged; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 

function stateChanged() { 
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
     document.getElementById("txtHint").innerHTML=xmlHttp.responseText; 
    } 
} 

function GetXmlHttpObject(){ 
    var xmlHttp=null; 

    try { 
     // Firefox, Opera 8.0+, Safari 
     xmlHttp=new XMLHttpRequest(); 
    } 
    catch (E1) { 
     //Internet Explorer 
     try { 
     xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
     catch (E2) { 
     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    } 

    return xmlHttp; 
} 
+0

मैं ajax कॉल करने के लिए एक आवरण लिखने की कोशिश कर नहीं कर रहा हूँ। मेरे प्रश्न में फॉलोअप टिप्पणी देखें – mkoryak

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