Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


XMLHttpRequest и Opera


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеПн, 23-Фев-2009 21:05    Заголовок сообщения: XMLHttpRequest и Opera
Цитата

Вот возьмем к примеру такой элементарный код:

HTML:
  1.  
  2. <head>...</head>
  3.  
  4. <div id="content" style="height:500px;width:800px"></div>
  5.  
  6. function onchange()
  7. {
  8.  document.getElementById("content").innerHTML="Status="+request.readyState;
  9.  if (request.readyState==4)
  10.   document.getElementById("content").innerHTML=request.responseText;
  11. }
  12.  
  13. var request=new XMLHttpRequest(); //Ну для IE было бы соответсвенно new ActiveXObject("Microsoft.XMLHTTP");
  14. request.onreadystatechange=onchange;
  15. request.open("GET","http://www.mail.ru",true);
  16. request.send(null);
  17. </script>
  18.  


Как видно из вышеприведенного простого кода, сначала в блоке div должны по-очереди отображаться цифры от 1 до 4 (или точнее до 3), информируя о статусе получаемых данных, а потом должен заполниться содержимым страницы mail.ru.

В браузере IE6 - все идет как надо, все стадии по-очереди отображаются, а после - заполняется контентом mail.ru.
В Opera и Mozilla - отображаются только стадии 1, а потом 2, и все - на этом останавливается, естественно, не загружая сам контент.

Хочу заметить, что если я в методе open указываю в качестве url не через http, а просто как локальный путь к файлу (абсолютный или относительный), то везде все работает на 100%.

В чем проблема? Раньше до фига подобных ajax-приложений писала все ОК было во всех браузерах, а теперь вот - больше пол года не писала, и что-то не доумеваю :(
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВт, 24-Фев-2009 15:10 
Цитата

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


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВт, 24-Фев-2009 17:32 
Цитата

Все равно тоже самое - очистила кэш, попробовала вообще на др. машине - то же самое, до чтатуса=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
Откуда: Донецк
СообщениеЧт, 26-Фев-2009 11:44 
Цитата

Ага, интересно. Но это, насколько я понимаю, тоже фича - теперь уже из области безопасности. Тот же IE у меня после установки какого-то фикса перестал выполнять скрипты и загружать ссылки из CHM-файлов, если они вели куда-либо на другой хост. Причем отключить это нельзя, в Microsoft Knowledge Base по поводу этого фикса было написано что-то в духе "а нефиг туда лазить честной программе".
В принципе, смысл в этом действительно есть. Иначе вставленный недобрым дядей код на чужой сайт способен наделать много бед.

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 26
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеСб, 28-Фев-2009 13:02 
Цитата

DrPass писал(а):
Иначе вставленный недобрым дядей код на чужой сайт способен наделать много бед.

Так ведь у CHM, HTML Application и пр. есть полное право запускать ActiveX без подтверждения пользователя.

Так-что это гораздо правельнее чем можно себе представить..

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВт, 03-Мар-2009 21:12 
Цитата

Вот что я вычитала на сайте IBM:
Цитата:
поскольку Ajax-код выполняется в "песочнице" и может соединяться только с тем же самым доменом


Ну видимо, под "ajax-кодом" имеется в виду в первую очедерь код, использующий XMLHttpRequest, а не ActiveXObject от MS.
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100