![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 6 Всего: 16 |
Здраствуйте.
Опять возвращаюсь к старой теме: подгрузка данных без перезагрузки страницы. Дано: 1. Большая и тяжёлая страница, с кучей-кучей объектов js, картинок и текста. 2. Узкий канал. Задача: Подгружать данные в виде кода JavaScript без перезагрузки страницы. Я вижу следующие варианты решения данной задачи: 1. Метод appendChild ( или replaceChild, что бы не плодить дополнительных скриптов). Суть в следующем: а) создаём новый элемент типа script б) задаём его свойства type = text/javascript и src = <откуда_грузить> в) говорим appendChild(этот_элемент).
На стороне сервера (/upload) генерируется текст alert('Вы передали: <%=param%> = <%=value%>'); для каждой переданной пары param=value; Таким образом, параметры передаются методом GET. Работает это в IE 5+(младше не проверял), Gecko, Opera (7.5+, младше не проверял). В нашем случае выскочит окошко с надписью "Вы передали: param1 = value1". Не работает: в Konqueror (что есть большой минус, ИМХО). На мой взгляд, метод имеет много плюсов, например то, что можно передавать любые данные: текст, объекты JS, в общем, любые типы данных JS. 2. IFRAME. Суть метода: делаешь невидимый IFRAME, в который при необходимости заливаешь данные перезагрузкой оного, потом, после загрузки, достаёшь из него полученный текст, eval() его и вот тебе код JS. Но, на мой взгляд, тут есть много минусов: а. Изменяется история браузера. б. Появляется кнопочка <back> в браузере, при нажатии на которую Вы попадаете на свою же страницу в. Во всяких ИЕ щелчки раздаются. г. Работает дольше, чем первый метод. Но плюсы в том, что работать будет в гораздо большем числе браузеров, чем в методе 1. Может быть и можно как-то избавиться от минусов а) и б), но я пока не знаю как. Но вот от минусов в) и г) точно не избавиться. ------------------------------------------------ Как решить задачу? Можно ли написать API в виде объекта JS, который позволит её решать на любом браузере (эх, мечты, мечты... В общем, To Be or Not to Be, that is question. :^) |
|||
|
||||
| DDT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 16.2.2004 Репутация: нет Всего: нет |
Я как раз ищу что-то подобное. Ты прямо к чаю
У меня вопрос по первому способу: что должно подгружаться файл JavaScript или можно, например, РНР |
|||
|
||||
| diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 6 Всего: 16 |
У меня подгружается текст, сгенерированный psp.
Да, можно использовать php. Вот только в psp у меня установлено req.content_type = "text/javascript" А в php, по моему, контент всегда тот, что указан в апаче (то есть, по дефолту, "text/html"); но это не означает, что работать не будет. Работает и под php. |
|||
|
||||
| diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 6 Всего: 16 |
Немного меняю метод 1.
Дело в том, что если запрос будет одинаковым, например, постоянно будет запрашиваться "/upload/?", то Opera и IE будут кэшировать запрос. А это не есть гуд, нам оно не надо. Избежать сие можно лишь каждый раз меняя адрес добавляемого элемента <script>. Адрес, конечно, мы менять не будем, но вот один параметр введём как обязательный и будем постоянно его изменять(он должен быть уникальным) (смотрим класс clUploadData(), элемент this.callID):
Есть ещё одно НО. Запрос передаётся методом GET, а посему имеет ограничения - объём передаваемых данных в запросе - 4 килобайта. Поэтому данные большего размера придётся или бить, или извращаться ещё каким-либо образом (например, открывать новое окошко с предложением ввести картинку |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Зовётся это дело ajax по моему, слышал что готовые либы есть, сам не использовал. Большая проблема это выбор минимальных требований. Например в Опера 6 метод appendChild не работает.
Если веб проект использует подобные фишки то не стоит оборачиватся на старые браузеры, себе дороже. Лучше вообще заюзать обьект XMLHTTPRequest, который поддерживается ИЕ6, Мозилла и Опера 8, а на всех остальных забить. Плюсы: скорость, простота, большая "мощь". -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Sardar, а IFRAME? Может, кто-то написал кроссбраузерный объект, опирающийся на IFRAME?
|
|||
|
||||
| DDT |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 16.2.2004 Репутация: нет Всего: нет |
файл по адресу: http://msc/?sid=3&ssid=3:
1.js:
При выполнении файла http://msc/?sid=3&ssid=3 выдается сообщение ААА, а за ним следующее:
И выдается страница
Почему не удается открыть узел? Это сообщение отредактировал(а) Aliance - 8.4.2005, 12:30 |
||||||||
|
|||||||||
| DDT |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 16.2.2004 Репутация: нет Всего: нет |
Все, вопрос сниямается. Разобрался.
Создал в документе форму с именем form. Строку:
Заменил на:
Все пошло. И без фреймов. Это сообщение отредактировал(а) Aliance - 8.4.2005, 12:31 |
||||
|
|||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
А NN? DDT Пользуйтесь клавишей code, немного подредактировал Ваш пост. |
|||
|
||||
| Gregof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 3.6.2004 Репутация: 1 Всего: 12 |
--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф) |
|||
|
||||
| diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 6 Всего: 16 |
Для себя решил, что через год-полтора можно будет использовать XMLHttpRequest. Только потому, что последний поддерживает метод POST. Вот только 7-ю оперу использует сейчас ну очень много народа.
Это сообщение отредактировал(а) diam - 13.4.2005, 07:08 |
|||
|
||||
| diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 6 Всего: 16 |
Метод подразумевает подгрузку методом GET. Это несёт с собой несколько минусов:
1. В логах запросов Apache будет видно, что запрашивают. Например, вот мой лог запроса:
2. Объём передаваемых данных не может превышать 4096 байтов (это спецификация HTTP). Но и имеет один плюс (несомненный): работает в Opera7, Gecko, IE5. А это большинство браузеров, ИМХО. Это сообщение отредактировал(а) Aliance - 25.5.2005, 16:48 |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
|
|||
|
||||
| Diesel Draft |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
можно использувать и другой метод
|
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Diesel Draft
ActiveX работает только в среде JScript, так что только его использование преведет к отсутствию кроссбраузерности |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |