Отправляю несколько запросов подряд с регистрацией callback-функции. Ответ к сожалению приходит только от последнего запроса
requestObj = new XMLHttpRequest();
requestObj.onreadystatechange = responseServer;
requestObj.open('POST',url,true);
requestObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
requestObj.send(data);
Когда делаю паузы после посылки, вставляя alert'ы, то всё нормально работает. Но хочется послать пачку запросов и ожидать от них всех ответы. Как такое сделать ?
Здравствуйте, burunduk, Вы писали:
B>Отправляю несколько запросов подряд с регистрацией callback-функции. Ответ к сожалению приходит только от последнего запроса
B> requestObj = new XMLHttpRequest();
B> requestObj.onreadystatechange = responseServer;
B> requestObj.open('POST',url,true);
B> requestObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
B> requestObj.send(data);
B>Когда делаю паузы после посылки, вставляя alert'ы, то всё нормально работает. Но хочется послать пачку запросов и ожидать от них всех ответы. Как такое сделать ?
скорее всего при создании следующего запроса объект requestObj просто-напросто уничтожается ) поэтому только от последнего и приходит значение, поэтому и паузы помогают
делайте requestObj локальной переменной. Самое простое — вынести это дело в отдельную функцию и использовать var:
var requestObj = new XMLHttpRequest();
спасибо, действительно похоже что в этом причина...
теперь мне не ясно как же идентифицировать нужный объект requestObj в callback-функции, заводить массив ?
function responseServer() {
if (requestObj.readyState == 4) {
// alert('resp');
var status = requestObj.status;
if (status == 200) {
DR>скорее всего при создании следующего запроса объект requestObj просто-напросто уничтожается ) поэтому только от последнего и приходит значение, поэтому и паузы помогают
DR>делайте requestObj локальной переменной. Самое простое — вынести это дело в отдельную функцию и использовать var:
DR>var requestObj = new XMLHttpRequest();
B>теперь мне не ясно как же идентифицировать нужный объект requestObj в callback-функции, заводить массив ?
попробуйте так:
requestObj.onreadystatechange = function () {
responseServer(this);
}
Я там напарился, пока отлаживал. Пару строчек подготовки HTTP-запроса в методе request() местами поменяешь — отваливается Opera, другую пару строк где-то еще поменяешь — отваливается Firefox. Короче говоря, тот факт, что все это работает под всеми браузерами, можно рассматривать как чудо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>