JSFiddle - React, Tailwind, and code Playground
HTML
<div id="foo">
<div>
<span></span>
</div>
<div>
<span></span>
</div>
</div>
JavaScript
var AJAX = function(url,data,callback,silent,loader) {
var a,
attempt = 0,
rsc = function() {
if( a.readyState == 4) {
if( a.status != 200) {
if( a.status > 999) { // IE sometimes throws 12152
attempt++;
if( attempt < 5)
send();
else if( !silent) {
console.log("HTTP Error "+a.status+" "+a.statusText+"<br />Failed to access "+url);
}
}
else if(!silent) {
console.log("HTTP Error "+a.status+" "+a.statusText+"\nFailed to access "+url);
}
}
else {
callback(JSON.parse(a.responseText));
}
}
},
to = function() {
//a.abort(); /* avoid re-aborting */
attempt++;
if( !silent)
console.log("Request Timeout\nFailed to access "+url);
if( attempt < 5)
send();
};
data = JSON.stringify(data);
var send = function() {
if( loader && attempt != 0) {
loader.children[0].firstChild.nodeValue = "Error... retrying...";
loader.children[1].firstChild.nodeValue = "Attempt "+(attempt+1)+" of 5";
}
a = new XMLHttpRequest();
a.open("POST",/*"/ajax/"+*/url,true); /* slight edit here for JSFiddle */
a.onreadystatechange = rsc;
//a.timeout = 5000;
setTimeout(function () { /* vs. a.timeout */
if (a.readyState < 4) {
a.abort();
}
}, 5000);
a.onabort = to; /* vs. a.ontimeout */
a.setRequestHeader("Content-Type","application/json");
a.send(data);
console.log('HTTP Requesting: %s (attempt %d)', url, attempt + 1);
};
send();
};
AJAX(
...