Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Фоновые запросы на сервер.  (Прочитано 10644 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« : 04-12-2005 11:35 » 

Это не вопрос, а информация для размышления.

Речь о программно инициализируемом запросе на какой-либо файл из браузера к серверу. Так же, получение ссылки на объект этого документа и поиск по нему.
В своих эксеперементах я несколько раз подходил к этому вопросу. В результате нарыл некоторые примеры, ну и сам немного пописал.
В общем, может кого-то это тоже интересует.

1) XMLHttpRequest или Microsoft.XMLHTTP. Нестандартизированный инструмент для отправки запросов и получения с сервера XML документа (уже отпарсеного).
Тут по-русски: http://www.webmascon.com/topics/technologies/13a.asp

[продолжение следует]
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 04-12-2005 11:40 » 

2) Смена картинок. Примитив, конечно.
Код:
<img id="img" src="1.gif" />
<script>
document.getElementById('img').src = '2.gif';
</script>
« Последнее редактирование: 19-12-2007 19:23 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 04-12-2005 11:43 » 

3) Получение файлов любого типа.
Код:
<iframe id="frm" style="display: none;" src=""></iframe>
<script>
document.getElementById('frm').src = 'filename';
</script>
Об этом методе чуть позже расскажу подробнее - тут много нюансов и вариантов борьбы с ними.
« Последнее редактирование: 19-12-2007 19:28 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-12-2005 18:31 » 

Продолжу...

Собственно, подгружать обновления можно с помошью любого тега, имеющего возможность задать внешний адрес ресурса для текущего отображения страницы. И в стилях то же самое: HTMLElementReference.style.backgroungImage = 'url(....)';. Причем, этот файл может находится где угодно. Напр., страница грузится по http, а картинка подгружается с локального диска.

Можно получить программный доступ к подгруженому документу, но существуют стандартные ограничения политики безопасности: страница с программой и подгружаемая страница должны находиться на одном сервере! Т.е. загрузить можно все (все что позволяет текущая политика браузера), а получить доступ только к файлам в том же домене.

Тип файла должен поддерживаться браузером (иначе он не будет знать, что с ним делать, и предложит сохранить его) и тем элементом, посредством которого файл подгружается (текст в img не запихнуть).

Все браузеры имеют свои особености. Напр., такой пример в IE работать не будет:
Код:
<div id="container"></div>
<script>
document.getElementById('container').innerHTML = '<iframe id="frm" src="example.txt"></iframe>';
</script>
Вариант для совместимости с IE:
Код:
<div id="container"></div>
<script>
document.getElementById('container').innerHTML = '<iframe id="frm" src=""></iframe>';
document.getElementById('frm').src = 'example.txt';
</script>
« Последнее редактирование: 19-12-2007 19:30 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 06-12-2005 18:47 » 

Посредством тегов frame и iframe можно подгрузить любой файл. С помощью img и в стилей типа background-image разумно загружать только картинки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-12-2005 19:25 » new

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

Следует помнить, что загрузка файлов происходит асинхронно! Т.е., задав frm.src = "file.html";, нужно дождаться загрузки файла. Когда это произойдет и произойдет ли вообще - предсказать невозможно. Попытка получить ссылку на незагруженный, или не полностью загруженный, документ может привести к ошибке. Обычно, документа просто нет, возможно - "about:none".
О методах синхронизации расскажу позжее.

Меня очень заинтересовала подгрузка тестовой информации.
Тут я вижу такие варианты:
1) получать страницу целиком и отображать ее в отдельном фрейме;
2) получать кусок страницы и отображать его там же (браузеры, как правило, сами добавляют отсутствующие теги html, head, body;
3) получать кусок страницы и вставлять его в основную страницу;
4) получать данные для обработки.

Вариант 1 и 2 - это стандартное использование фреймов. Особенности след.:
- стили основной страницы на него не действуют и их надо определять в документе;
- хотя загрузка выполняется асинхронно, но, если не критично, можна на это забить;
- документ не обязан быть html-ом - это может быть, например, xml.
Фишкой может быть первоначатьная невидимость фрейма и подгрузка и отображение по необходимости.
Подобный метод применяется на сайте rsdn.ru для раскрытия меню. Для каждого пункта меню создается скрытый контейнер, первоначатьно пустой. Достаточно просто, но, на мой взгляд, несколько громоздко. Синхронизация у них используется: если файл не загружен, то фрейм не показывается (меню не раскрывается).

Вариант 3 позволяет работать аналогично варианту 2, но имеет след. отличия:
- подгруженный html-код использует один (или малое число) контейнеров iframe.
- этот кусок страницы не нуждается в дополнительных определениях стилей: используются стили базовой страницы;
- обязательна синхронизация;
[незакончено - позже допечатаю]
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines