| Автор
| Сообщение |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Вот возьмем к примеру такой элементарный код:
| HTML: | <div id="content" style="height:500px;width:800px"></div> function onchange() { document.getElementById("content").innerHTML="Status="+request.readyState; if (request.readyState==4) document.getElementById("content").innerHTML=request.responseText; } var request=new XMLHttpRequest(); //Ну для IE было бы соответсвенно new ActiveXObject("Microsoft.XMLHTTP"); request.onreadystatechange=onchange; request.open("GET","http://www.mail.ru",true); request.send(null); </script>
|
Как видно из вышеприведенного простого кода, сначала в блоке div должны по-очереди отображаться цифры от 1 до 4 (или точнее до 3), информируя о статусе получаемых данных, а потом должен заполниться содержимым страницы mail.ru.
В браузере IE6 - все идет как надо, все стадии по-очереди отображаются, а после - заполняется контентом mail.ru.
В Opera и Mozilla - отображаются только стадии 1, а потом 2, и все - на этом останавливается, естественно, не загружая сам контент.
Хочу заметить, что если я в методе open указываю в качестве url не через http, а просто как локальный путь к файлу (абсолютный или относительный), то везде все работает на 100%.
В чем проблема? Раньше до фига подобных ajax-приложений писала все ОК было во всех браузерах, а теперь вот - больше пол года не писала, и что-то не доумеваю  |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Да я думаю, что это не проблема, а фича. Опера просто закешировала страницу, и поэтому ее повторную подгрузку не выполняет, а тянет из кеша, соответственно, событие "завершения загрузки" не вызывается. Для локальных файлов броузер свой кеш не использует, поэтому грузит всегда _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Все равно тоже самое - очистила кэш, попробовала вообще на др. машине - то же самое, до чтатуса=2 работает, а потом останавливается. В Опере.
Добавлено спустя 1 час 37 минут 30 секунд:
Какие предположения?
Добавлено спустя 2 часа 14 минут 52 секунды:
вот еще информация:
прим. для краткости, буду называть все объекты аналогичные в разных браузерах XMLHttpRequest - этим словом.
- до этого я загружала клиентскую страницу не через веб-сервер, а локально, т.е. двойным щелчком мыши (по логике - это не должно играть никакой роли).
- сейчас я загрузила страницу со скриптом на веб-сервер и запустила ее оттуда.
Что получилось - в объект XMLHttpRequest загружаются (т.е проходит до состояния = 4) только те документы и скрипты, указанные через http-адрес, находящиеся на том же сервере, с которого произошла загрузка самой клиентской страницы, с которой и идет обращение. Т.е., если клиентская страница, допустим, mypage.html (со скриптом) находится по адресу - http://mydomainname.com/mypage.html, то зайдя по этой ссылке, в XMLHttpRequest загрузятся до конца лишь тогда документы и результаты работы скриптов, когда эти документы и сами скрипты находятся на этом же домене, т.е. например http://mydomainname.com/anyscript.asp. Т.е., другими словами, mydomainname.com - должен быть одинаков и в адресной строке браузера и в параметре url метода open объекта XMLHttpRequest. Т.к., если я пишу др. домен, например - http://www.google.ru, то у меня процесс стопорится на том же месте, т.е. в Opere останавливается на readyState = 2. Более того, в IE - вообще никакой readyState теперь не показывает.
Напрашивается вывод, что XMLHttpRequest предназначен для обращения к ресурсам того веб-сервера, с которого была загружена клиентская страница, НО ведь это же не так!?
Думаю дело вряд ли в сервере (локальном). Проблема кажется чисто клиентского характера. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Ага, интересно. Но это, насколько я понимаю, тоже фича - теперь уже из области безопасности. Тот же IE у меня после установки какого-то фикса перестал выполнять скрипты и загружать ссылки из CHM-файлов, если они вели куда-либо на другой хост. Причем отключить это нельзя, в Microsoft Knowledge Base по поводу этого фикса было написано что-то в духе "а нефиг туда лазить честной программе".
В принципе, смысл в этом действительно есть. Иначе вставленный недобрым дядей код на чужой сайт способен наделать много бед. _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
| DrPass писал(а): | | Иначе вставленный недобрым дядей код на чужой сайт способен наделать много бед. |
Так ведь у CHM, HTML Application и пр. есть полное право запускать ActiveX без подтверждения пользователя.
Так-что это гораздо правельнее чем можно себе представить.. _________________
 |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Вот что я вычитала на сайте IBM:
| Цитата: | | поскольку Ajax-код выполняется в "песочнице" и может соединяться только с тем же самым доменом |
Ну видимо, под "ajax-кодом" имеется в виду в первую очедерь код, использующий XMLHttpRequest, а не ActiveXObject от MS. |
|
| В начало |
|
 |
|