यह लगभग हमेशा सच होता है। हालांकि, एक महत्वपूर्ण अंतर यह है कि 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();
}