Skip to content

Instantly share code, notes, and snippets.

@aNNiMON
Last active April 23, 2017 13:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aNNiMON/fd6b6e10a89a3eea7a61 to your computer and use it in GitHub Desktop.
Save aNNiMON/fd6b6e10a89a3eea7a61 to your computer and use it in GitHub Desktop.
AJAX with memoization
//
// Author: Dustin Diaz
// http://dustindiaz.com/faster-ajax/
//
var asyncRequest = function() {
function handleReadyState(o, callback, fallback) {
if (!o || o.readyState != 4) return;
if (o.status == 200) {
if (callback) {
callback(o);
}
} else if (fallback) {
fallback(o);
}
}
var getXHR = function() {
var http;
try {
http = new XMLHttpRequest;
getXHR = function() {
return new XMLHttpRequest;
};
}
catch(e) {
var msxml = [
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP'
];
for (var i=0, len = msxml.length; i < len; ++i) {
try {
http = new ActiveXObject(msxml[i]);
getXHR = function() {
return new ActiveXObject(msxml[i]);
};
break;
}
catch(e) {}
}
}
return http;
};
return function(method, uri, postData, callback, fallback) {
var http = getXHR();
http.open(method, uri, true);
http.onreadystatechange = function() {
handleReadyState(http, callback, fallback);
};
http.send(postData || null);
return http;
};
}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment