W3C spec का सुझाव देते हैं कार्यान्वयन निम्नलिखित: नेटवर्क पर एक XML दस्तावेज़ से डेटा के साथ कुछ लाए जाने क्या करने के लिए कुछ सरल कोड:क्या एक्सएचआर ट्रिगर ऑनस्टस्टेटेन्चेंज को कई बार तैयारस्टेट = डोन कर सकता है?
function processData(data) {
// taking care of data
}
function handler() {
if(this.readyState == this.DONE) {
if(this.status == 200 &&
this.responseXML != null &&
this.responseXML.getElementById('test').textContent) {
// success!
processData(this.responseXML.getElementById('test').textContent);
return;
}
// something went wrong
processData(null);
}
}
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "unicorn.xml");
client.send();
इस कार्यान्वयन वास्तव में सही है?
डीबग के दौरान मुझे ऐसे मामले मिलते हैं जब तैयारस्टेटेड ईवेंट हैंडलर को पंक्ति में एक से अधिक बार तैयार किया जाता है, उसी स्थिति के साथ == 4. मुझे लगता है कि यह व्यवहार सही है, क्योंकि चश्मा कहता है कि राज्य के प्रत्येक परिवर्तन को आग लगनी चाहिए घटना, और वह तैयारस्टेट हमेशा मौजूदा स्थिति के बराबर होना चाहिए, इसलिए यदि घटनाओं की कतार में कई घटनाएं ढीली होती हैं, तो यह स्पष्ट है कि किसी को तैयारस्टेट == 4.
http://jsfiddle.net/44b3P/ - यह है उपर्युक्त उदाहरण अनुरोध के बाद निष्पादन को रोकने के लिए डीबगर कॉल के साथ बढ़ाया गया है, और प्रक्रिया डेटा में चेतावनी() के साथ। एक बार जब आप निष्पादन को रोक दें तो आपको 3 अलर्ट मिलेंगे।
w3c से यह उदाहरण वेब पर कई स्थानों पर चिपकाया गया & कॉपी करता है - विशेष रूप से ओपनसामाजिक इस तरह xhr घटनाओं को संभालने लगता है। क्या यह सही है?
मूल रूप से प्रदान किए गए कोड का उपयोग करके - एक परिशिष्ट के रूप में, 'this.onreadystatechange = null;' पर्याप्त है, आपको XHR ('क्लाइंट') के मूल संदर्भ की आवश्यकता नहीं है। – Monchoman45
जब मैंने 'xhr.onreadystatechange' हटाएं' का उपयोग करने का प्रयास किया, तो यह काम नहीं किया, इसे 'xhr.onreadystatechange = null' में बदलकर अच्छी तरह से काम किया। –
मैंने इस समाधान डिन काम के लिए 'हटाएं' –