Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Глюки с XMLHttpRequest


Автор: Black 15.6.2005, 00:45
Я постоянно замечаю, что иногда запросы от XMLHttpRequest как будто исчезают. Точнее неверно работает:

zapros.responseText

Запрос то отсылается. А вот ответ не приходит.

Серверные скрипты работают на УРА. Все уже тысячу раз проверил. А вот если я буду постоянно запускать на выполнение XMLHttpRequest так один из 20 раз обязательно не вернет результат от серверного скрипта.

Почему это происходит? Или это только у меня??? Может как-то от этих багов можно избавиться.

Также заметил, что если на одну функцию формирующую XMLHttpRequest-запросы повесить два события, и они будут почти мнговенно вызывать запросы через XMLHttpRequest, тогда даже запросы не посылаются.

Т.е. XMLHttpRequest не умеет выстраивать цепочку ожидания запросов.

Поэтому приходится все события вешать на разные XMLHttpRequest. Каждому события - свой XMLHttpRequest .

Автор: Иль 15.6.2005, 08:24
ничего себе!!! PHP-DIRECTOR, спасибо что поделился. Наверное сэкономил мне тучу времени в будующем (цепочка ожиданий запросов).

Автор: Ciber SLasH 15.6.2005, 12:15
2PHP-DIRECTOR:
Сильно не бей, если щас глупость скажу, XmlHttpRequest'ом ещё не пользовался. smile
Но, возможно это зависит от браузера. Как я понял ты юзаешь Лису, а в ней часто при нажатии на ссылку запрос отсылается, но она не дожидаясь ответа говорит, что "Готово", хотя на самом деле страница не обновляется.

Автор: Black 15.6.2005, 13:14
Ciber SLasH
в IE запросы пропадают реже.

Короче поставлю на все кнопки (после нажатия) disable и думаю будет нормально.

Автор: Opik 15.6.2005, 18:18
PHP-DIRECTOR
Да, я такую проблему тоже наблюдал у себя в чате, я думаю это связано с тем, что он не успевает обработать предыдущий. а уже летит следующий запрос...

Автор: Рыжий 15.6.2005, 18:23
вот в этом то и проблема - ведь xmlhttprequest был четко сделан для быстрых чато, а если в чате человек 200 - обязательно кто-то напишет в одно время вот тут и несправиться xmlhttprequest - БОЛЬШОЙ минус с его стороны smile

Автор: Иль 15.6.2005, 19:22
И вот это не помогает?
Код

ax=new XMLHttpRequest;
bx=new XMLHttpRequest;

В смысле:
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="JavaScript" type="text/JavaScript">

</script>
</head><body id="y" onclick="" onload="">
<script language="JavaScript" type="text/JavaScript">
ax=new XMLHttpRequest;
bx=new XMLHttpRequest;
alert(ax+"\n"+bx)
alert(ax==bx)
</script>
</body></html>

Добавлено @ 19:24
Ну для ИЕ что-то похожее будет

Автор: Black 15.6.2005, 22:31
Также xmlhttprequest не умеет отсылать данные через POST. Хотя должен уметь smile

Только GET.

Проверял через скрипт на PHP

Если переменная

$_GET['ля-ля'] - существует.
То $_POST['ля-ля'] - не существует. Хотя отсылка данных идет вроде бы через POST.

Автор: Aliance 16.6.2005, 12:45
Цитата(PHP @ 15.6.2005, 23:31)
не умеет отсылать данные через POST

Как же не умеет, умеет.

Автор: Black 16.6.2005, 17:56
Aliance
приведи пример, как с помощью xmlhttprequest отправить данные через POST.

PHP скрипт всегда принимает переменные как GET. Либо я чего-то не того делаю, либо и правда не умеет через POST посылать.

Автор: sergejzr 16.6.2005, 18:03
Необновление запроса может быть вызвано тем, что xmlhttprequest ожидает файл. А что происходит с файлом после загрузки? Правильно он кэшируется. чтобы не забирать одно и тоже каждый раз.
Происходящее можно проверить на то, что отсылает сервер. Cкорее всего "not modified".

ИМХО надо серверную сторону в этом винить. И смотреть, как избавится от этого...

Автор: Sardar 17.6.2005, 03:11
Цитата(PHP @ 15.6.2005, 17:23)
а если в чате человек 200 - обязательно кто-то напишет в одно время вот тут и несправиться xmlhttprequest - БОЛЬШОЙ минус с его стороны

Какая разница обьекту в твоём клиенте на количество юзеров в чате ? smile Хорошенько подумай что такое XMLHttpRequest.

Проблема скорее всего в том что при каждом send обьект abort'иться, елси что то не дозагрузилось, то контент накрываетьс я тазом и по новой. Выход:

  • хороший - ставим несколько обьектов
  • не очень - передавать в метод open третьим аттрибутом false , таким образом JS не продолжит исполнение пока обьект не загрузиться полностью, либо не будет ошибки.


Цитата(sergej @ 16.6.2005, 17:03)
Происходящее можно проверить на то, что отсылает сервер. Cкорее всего "not modified".

Сервер может это отослать только если браузер отсылает If-Modifed-Since заголовок, а значит документ в кеше. Если сервак присылает not modified, то браузер берёт инфу из кеша, клиент при этом ни о чём не догадываеться. Надо искать ошибки в: таймаутах и валидности XML, ИЕ обещает ругаться матом если ответ приходит не валидным XML. Любые эмоции бродилки это задержки по времени и неизвествные глюки smile

Автор: Aliance 17.6.2005, 12:04
PHP-DIRECTOR
http://forum.vingrad.ru/index.php?showtopic=51779

Автор: Black 17.6.2005, 13:02
Так я так и не понял как в Мозилле передать POST

если в IE это допустимо
Код


GetData.open('post', url, false);
GetData.send(param);


где url - это путь к скрипту, который обрабатывает запрос.
param - параметры передаваемые скрипту-обработчику.

Ну, а в Мозилле как передать данные постом???
Ведь там всегда так:

Код

GetData.open('post', url, false);
GetData.send(null);


А если не нуль. то Мозилла просто виснет напрочь smile

Автор: Black 17.6.2005, 14:38
Кстати, еще заметил:

Код

GetData.open('post', url, true);


работает, а так:

Код

GetData.open('post', url, false);


не работает в Мозиле, а в IE работает.
В данном случае (с false) Мозила не возвращает результат запроса вообще smile


Автор: Aliance 18.6.2005, 18:04
Отправлять null нужно только для ИЕ.
Там все описано.
Кроме того, если не изменяет память, кто-то обнаружил глюк, якобы нужно писать метод заглавными буквами ( POST )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)