<script type="text/javascript" language="javascript">
var xhr = new Array(); // ARRAY OF XML-HTTP REQUESTS
var xi = new Array(0); // ARRAY OF XML-HTTP REQUEST INDEXES
xi[0] = 1; // FIRST INDEX SET TO 1 MAKING IT AVAILABLE
function xhrRequest(type) {
if (!type) {
type = 'html';
}
// xhrsend IS THE xi POSITION THAT GETS PASSED BACK
// INITIALIZED TO THE LENGTH OF THE ARRAY(LAST POSITION + 1)
// IN CASE A FREE RESOURCE ISN'T FOUND IN THE LOOP
var xhrsend = xi.length;
// GO THROUGH AVAILABLE xi VALUES
for (var i=0; i<xi.length; i++) {
// IF IT'S 1 (AVAILABLE), ALLOCATE IT FOR USE AND BREAK
if (xi[i] == 1) {
xi[i] = 0;
xhrsend = i;
break;
}
}
// SET TO 0 SINCE IT'S NOW ALLOCATED FOR USE
xi[xhrsend] = 0;
// SET UP THE REQUEST
if (window.ActiveXObject) {
try {
xhr[xhrsend] = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xhr[xhrsend] = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
} else if (window.XMLHttpRequest) {
xhr[xhrsend] = new XMLHttpRequest();
if (xhr[xhrsend].overrideMimeType) {
xhr[xhrsend].overrideMimeType('text/' + type);
}
}
return (xhrsend);
}
function fcn(url, reqType) {
var xhri = xhrRequest('html');
xhr[xhri].open('GET', url, true);
xhr[xhri].onreadystatechange = function() {
if (xhr[xhri].readyState == 4 && xhr[xhri].status == 200) {
alert(xhr[xhri].responseText);
xi[xhri] = 1;
xhr[xhri] = null;
}
};
xhr[xhri].send(null);
}
function loadMulti() {
// CALL A FUNCTION THAT USES xmlHttp MULTIPLE TIMES
fcn('file1.html');
fcn('file2.html');
fcn('file3.html');
}
window.onload = loadMulti();
</script>
</pre>
I'm rewriting some of this from the functions I've been testing, so something might break, but the general idea's there.
Here's a sample of it in use: http://www.digitalbonsai.com/xhrmulti.php
- Luis (lu@digitalbonsai.com)