Вход

Просмотр полной версии : Использование нескольких объектов запроса


Димонка
13.07.2010, 01:15
Хотелось бы узнать, можно ли использовать сразу несколько запросов независимых друг от друга для общения, так сказать, сервера с браузером? Прочтя книгу Бретта Маклафлина "Изучаем AJAX" мною было понято следующее: несколько запросов можно создать! Автор это делает следующим образом:

function createRequest() {
var request = null;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxm12.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null) {
alert("Error creating request object!");
} else {
return request;
}
}

var req1 = createRequest();
var req2 = createRequest();
// и т.д.

Теперь можно создавать несколько запросов, но! При вызове браузером обратной функции должен проверяться статус того или иного запроса, прально? Да! В книге эти запросы фиксированы, то есть мы знаем что у нас есть такой запрос (req1) и такой запрос (req2). C помощью функции if-else можно легко определить и статус и всё остальное что касается этого запроса. Да даже что там определять, ведь то что стоит проверить задаём мы. Вот что я имею в виду:

if (req1.readyState == 4) {
if (req1.status == 200) {
...
...
}
else if (req2.readyState == 4) {
if (req2.status == 200) {
...
...
}

как создать запрос различающийся от предыдущего понятно. Для этого можно передать в функцию createRequest() например id запроса. А вот как разобраться с обратным ответом сервера? Как узнать на какой запрос ответил сервер если этих запросов может быть сколько угодно?

Буду очень признателен если кто-нить поможет разобраться в этой хитрой штукенции!

Gvozd
13.07.2010, 01:33
А вот как разобраться с обратным ответом сервера? Как узнать на какой запрос ответил сервер если этих запросов может быть сколько угодно?
если вы назначаете запросам одинаковую функцию, то значит вы их хотите обрабатывать одинаково. верно же?
если вы хотите два запроса обрабатывать по разному, то почему не повесите им разные функции?
для всех исключений(коих в голову сразу мне не приходит), заводите массив XHR-объектов, и используйте замыкания

Димонка
13.07.2010, 12:04
Прочёл только что статейку на этом сайте http://javascript.ru/tutorial/events/timing#ochered-sobytiy. Эт получается, если я, например, буду использовать стандартную модель запроса (с созданием только одного объекта запроса) и стану отправлять через этот объект поочередно, ну скажем, 4 запроса, то 1,2,3 сделаные мною запросы ранее не потеряются? Т.е. я так понимаю браузер сам выстроит эти запросы и будит их отправлять поочерёдно, пока не будет выполнен предыдущий. Это как синхронный запрос, только браузер не подвисает! Браузер кэширует те действия пользователя, которые были произведены. я так понял? Например я отправляю 2запрос и тут же 3 и 4. Как поступит в этой ситуации браузер? браузер кэширует 3 и 4 запросы, а при получении ответа тут же отправляет серверу 3 запрос и т.д.

e1f
13.07.2010, 13:31
http://xmlhttprequest.ru/

Димонка
15.07.2010, 23:40
Спасибо всем! после прочтения статьи http://xmlhttprequest.ru всё стало понятно!