यह लगभग हमेशा सच होता है। हालांकि, एक महत्वपूर्ण अंतर यह है कि onreadystatechange
इवेंट हैंडलर readyState==4
उन मामलों में भी ट्रिगर हो जाता है जहां onerror
हैंडलर आमतौर पर ट्रिगर होता है (आमतौर पर नेटवर्क कनेक्टिविटी समस्या)। इस मामले में इसे 0 का दर्जा प्राप्त है। मैंने सत्यापित किया है कि यह नवीनतम क्रोम, फ़ायरफ़ॉक्स और IE पर होता है।
इसलिए यदि आप उपयोग कर रहे हैं onerror
और आधुनिक ब्राउज़रों को लक्षित कर रहे हैं, तो आपको इसका उपयोग नहीं करना चाहिए, onreadystatechange
बल्कि इसका उपयोग करना चाहिए onload
, जिसे केवल तभी गारंटी दी जा सकती है जब HTTP अनुरोध सफलतापूर्वक पूरा हो गया हो (वास्तविक प्रतिक्रिया और स्थिति कोड के साथ)। अन्यथा आप त्रुटियों के मामले में दो घटना संचालकों को समाप्त कर सकते हैं (जो कि इस मामले के बारे में मुझे अनुभवजन्य रूप से कैसे पता चला है।)
यहाँ एक प्लंकर परीक्षण कार्यक्रम की एक कड़ी है जो मैंने लिखा था कि आप विभिन्न URL का परीक्षण कर सकते हैं और readyState
विभिन्न मामलों में जावास्क्रिप्ट ऐप द्वारा देखे गए घटनाओं और मूल्यों के वास्तविक अनुक्रम को देख सकते हैं । जेएस कोड भी नीचे सूचीबद्ध है:
var xhr;
function test(url) {
xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function() { log(xhr, "readystatechange") });
xhr.addEventListener("loadstart", function(ev) { log(xhr, "loadstart", ev.loaded + " of " + ev.total) });
xhr.addEventListener("progress", function(ev) { log(xhr, "progress", ev.loaded + " of " + ev.total) });
xhr.addEventListener("abort", function() { log(xhr, "abort") });
xhr.addEventListener("error", function() { log(xhr, "error") });
xhr.addEventListener("load", function() { log(xhr, "load") });
xhr.addEventListener("timeout", function(ev) { log(xhr, "timeout", ev.loaded + " of " + ev.total) });
xhr.addEventListener("loadend", function(ev) { log(xhr, "loadend", ev.loaded + " of " + ev.total) });
xhr.open("GET", url);
xhr.send();
}
function clearLog() {
document.getElementById('log').innerHTML = '';
}
function logText(msg) {
document.getElementById('log').innerHTML += msg + "<br/>";
}
function log(xhr, evType, info) {
var evInfo = evType;
if (info)
evInfo += " - " + info ;
evInfo += " - readyState: " + xhr.readyState + ", status: " + xhr.status;
logText(evInfo);
}
function selected(radio) {
document.getElementById('url').value = radio.value;
}
function testUrl() {
clearLog();
var url = document.getElementById('url').value;
if (!url)
logText("Please select or type a URL");
else {
logText("++ Testing URL: " + url);
test(url);
}
}
function abort() {
xhr.abort();
}