Ваша проблема в том, что у вас есть только один идентификатор http_request, который используется повторно при каждом вызове функции makeRequest. Вот одна простая настройка: -
function makeRequest(url,parameters) {
var http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function() {
alertContents(http_request)
};
http_request.open('GET', url + parameters, true);
http_request.send(null);
return http_request;
}
function alertContents(http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
alert('Found: ' + http_request.responseText);
} else {
alert('There was a problem with the request.');
}
http_request.onreadystatechange = fnNull;
}
}
function fnNull() { };
Идентификатор http_request является локальным для каждого выполнения makeRequest. Правильный экземпляр XHR затем передается в alertrContents каждый раз, когда onreadystatechange запускается с использованием перехвата.
Кстати, почему отдельный URL от параметров? Поскольку вызывающая сторона должна убедиться, что аргумент параметров правильно закодирован, это не выглядит как очень полезная абстракция. Кроме того, вызывающий может в любом случае просто передать URL-адрес, содержащий строку запроса.