- Обновление содержимого веб-страницы без перезагрузки с помощью JavaScript
- Пример обновления содержимого страницы без перезагрузки
- Пример передачи функции в метод .html()
- Заключение
- Динамическое обновление веб-страницы
- Ближе к сути
- Вариант 1 — дублирование
- Вариант 2 — всемогущий сервер и «толстые» ответы
- Вариант 2а — всемогущий сервер и «тонкие» ответы
- Вариант 3 — всемогущий javascript
- Заключение
- Как обновить div без перезагрузки страницы?
- Войдите, чтобы написать ответ
- Как ускорить итерацию в два раза?
- Как сохранить форматирование таблицы после клонирования строки в PHPWord?
- как обновить определённую часть страницы
- Решение
- как обновить определённую часть страницы
- Решение
Обновление содержимого веб-страницы без перезагрузки с помощью JavaScript
Доброго времени суток. На этот раз еще немножечко про JavaScript. Появилась необходимость обновлять содержимое блока по нажатию на кнопку, без перезагрузки страницы, чтобы не свести пользователя с ума. Благодаря этой небольшой заметке можно раз и навсегда запомнить, как такое реализовать.
Пример обновления содержимого страницы без перезагрузки
Прежде всего, нам нужен блочный элемент. Пусть это будет , создадим его на странице и присвоим ему уникальный идентификатор, по которому его узнает jQuery.
Важно понимать, что идентификатор должен быть уникальным на всей странице, поэтому вызовом $(‘#block’) мы получим первый элемент на странице с таким id. Если нужно изменить содержимое нескольких элементов, стоит использовать классы.
Hello World
Hello World |
Button 1
Button 2
Button 3
Clear block
return false; после вызова нужен для того, чтобы отменить переход по url из href , в нашем случае мы не вернемся вверх страницы, а останемся на месте.
Теперь рассмотрим саму функцию на JS, менять содержимое блока будем с помощью метода .html() . Если использовать его без аргументов, то он вернет нам текущее содержимое блока, если передать ему один аргумент, например строку, то он заменить содержимое блока на нее. В более приближенных к реальности случаях, методу передается функция, которая отрабатывает для блока и возвращает ему новое содержимое. Но пока мы ограничимся передачей строки.
Вот как будет выглядеть код веб-странички.
Button 1
Button 2
Button 3
Clear block
Пример передачи функции в метод .html()
Я придумал совсем простенькую функцию, которая будет накапливать нашу историю нажатий на кнопки, и очищать ее, когда мы захотим. Для демонстрации вполне достаточно.
function setNewEntry(entry) < $('#block').html(getNewEntry($('#block').html(), entry)); >function getNewEntry(oldHTML, newHTML)
Заключение
Ну вот и все, если разобраться, то ничего сложного, но с помощью этого метода можно вершить «великие дела» и создавать динамические веб-страницы на любой вкус. Спасибо за внимание!
Динамическое обновление веб-страницы
Никого уже не удивишь концепцией динамического HTML, почти все сайты давно в той или иной мере используют javascript для того, чтобы сделать страницы интерактивными. А с появлением технологии AJAX стало возможным асинхронно генерировать запросы к серверу, чтобы изменять старые данные на сервере или получать новые. Но как именно обновлять структуру страницы? Кто должен генерировать новый html — сервер или javascript? А может, все вместе?
Посмотрим, как можно ответить на эти вопросы.
Для начала, я опишу жизненный цикл страницы. Сразу скажу, что я не собираюсь описывать этот процесс досконально, здесь требуется только понимание основной логики процесса.
Любое веб-приложение можно логически поделить на две составляющие — на клиентскую часть и серверную часть. К клиентской части относятся сам браузер и скрипты, которые он выполняет, к серверной — набор скриптов, которые генерируют ответ на любой запрос пользователя.
Жизнь любой страницы начинается с запроса от клиента к серверу. Ответом будет код страницы, содержащий, помимо структуры и стилей, логику клиентской части.
После получения страницы с сервера, браузер отображает её и запускает на выполнение приложенные к ней скрипты.
Клиентская часть реагирует на различные события — например, на клик по некоторому элементу, перемещение мыши или на истечение таймера. Для того, чтобы получить какие-то данные с сервера(или отправить что-то на него), используются дополнительные, обычно асинхронные, запросы.
Пикантность начинается, когда необходимо в какой-то момент перерисовать некоторые компоненты на странице. Для того, чтобы обновить структуру страницы, скрипту клиента необходимо знать, что необходимо убрать, что и куда необходимо добавить, что на что заменить. Вот тут-то и появляются разные варианты, как организовать такие обновления.
Ближе к сути
Для удобства объяснения рассмотрим вариант обновления простой страницы с лентой новостей и, скажем, счетчиком подписчиков. Мы хотим, чтобы браузер регулярно проверял обновления ленты, добавляя новости по мере их появления. А еще мы хотим, чтобы каждый посетитель видел динамику роста популярности нашего сайта — пусть счетчик подписчиков тоже регулярно обновляется.
Тело нашей страницы может выглядеть, например, так:
Вариант 1 — дублирование
Основная идея — логику отображения знает и клиентская, и серверная часть. В таком случае, ответы на регулярные запросы со стороны клиента могут содержать исключительно данные — изменения в модели, и выглядеть, например, так:
При получении такого ответа клиентская часть «оборачивает» данные в html-теги, добавляет необходимые тексты и обновляет структуру страницы.
Серверу же знания об отображении нужны только для того, чтобы сгенерировать изначальную версию страницы.
- Требуется продублировать код — он будет и в клиентской части, и в серверной;
- Клиентская часть должна знать, как именно поступать с каждой порцией данных от сервера — иногда нужно заменить html элемента, иногда добавить новые данные к уже существующему коду;
Вариант 2 — всемогущий сервер и «толстые» ответы
Основная идея — логику отображения знает только сервер, клиентская часть получает уже готовый html-код элементов. Здесь ответ сервера выглядит так:
Замечу, что пересылается здесь весь html каждого компонента на странице. Реализуется же такой способ просто — сервер генерирует страницу по кускам, клиент при получении ответа заменяет тела отдельных элементов.
- Многократная генерация одного и того же кода, особенно неэффективно при небольших изменениях;
- Огромный объем трафика, особенно на больших страницах;
Вариант 2а — всемогущий сервер и «тонкие» ответы
Можно попытаться исправить главный недостаток предыдущего варианта. Сервер может не отправлять весь html компонента, а присылать только «дельту» — изменения, которые необходимо внести. Наш ответ тогда может стать таким:
Теперь клиент определяет элемент, который будет изменять, и то, как он его будет изменять, непосредственно из ответа сервера.
- Все еще достаточно большой объем сетевого трафика;
- Клиент должен отправить серверу текущее состояние каждой компоненты, закодированное некоторым образом, чтобы сервер понял, относительно чего считать дельту;
- Сложность вычисления и записи дельты в случае нетривиальных изменений;
- Общее усложнение и клиентской, и серверной части;
Вариант 3 — всемогущий javascript
Можно переложить всю ответственность за генерацию html на клиента. В таком случае сервер будет только предоставлять данные, необходимые для отображения. Ответы, как и в первом варианте, будут содержать только данные:
Так в чем же существенное отличие от первого варианта? А заключается оно в том, что сервер не выполняет первоначальную генерацию страницы, её сборка осуществляется уже браузером клиента. Вариант этот только выглядит странным, он может пригодиться, если необходимо уменьшить нагрузку на сервер.
- Малый объем трафика — передаются только необходимые данные;
- Уменьшение нагрузки на сервер;
- Высокая нагрузка на компьютер пользователя;
- Возможна избыточность — часть знаний клиентской части об отображении может так и остаться невостребованной, если какие-то события не наступят;
Заключение
Каждый из рассмотренных методов имеет право на жизнь, и может быть использован в проектах разной сложности. Лично я во встреченных мною проектах чаще всего видел первый вариант, несмотря на нарушение им моего любимого принципа DRY — Don`t repeat yourself.
А какие принципы вы используете при разработке динамических страниц?
Как обновить div без перезагрузки страницы?
Нужно обновлять один блок, но не затрагивая остальные, без перезагрузки страницы.
вот пример кода:
Не совсем это имел введу, нужно чтобы исполнялся код в div, а так вы просто присваивайте новый код только в виде js я так привёл пример, мне нужно будет обновлять таблицу.
Нужно с помощью js как то обновить этот div, чтобы в нём исполнился уже существующий код.
Чего? Кого? Что загружать? Где исполнять? JS? PHP? Ничего не понятно.
Если про PHP речь, то можно запросить с бэка скрипт фетчем, получить результат и подставить в контейнер.
И так бесконечное количество раз.
Самое простое — сделать рядом скрытый
Либо использовать AJAX для получения содержимого с сервера.
Войдите, чтобы написать ответ
Как ускорить итерацию в два раза?
Как сохранить форматирование таблицы после клонирования строки в PHPWord?
как обновить определённую часть страницы
На странице есть ссылка на изменение параметра ссылка. Как сделать, чтобы после клика на неё перезагружалась не вся страница, а только её часть?
Как обновить только часть страницы
МОжно ли обновить страницу но при этом например шапка и футер сайта не обновляются, а только.
Ссылка на определенную часть страницы
Есть страница, на которой есть скрытая форма. При нажатии на кнопку ОТВЕТИТЬ на комментарий эта.
Как обновить часть кода каждые N сек?
Мне нужно обновить часть кода, а именно только этот: <iframe.
Сообщение было отмечено как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
html> head> meta http-equiv="content-Type" content="text/html; charset=utf-8"/> title>Vicont/title> script type='text/javascript'> function refresh(param)< var XMLHttpRequestObject = false; if (window.XMLHttpRequest) XMLHttpRequestObject = new XMLHttpRequest(); else if(window.ActiveXobject) XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); if (XMLHttpRequestObject) < XMLHttpRequestObject.open('GET','handler.php?alb='+param); XMLHttpRequestObject.onreadystatechange = function()< if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) document.getElementById('result').innerHTML = XMLHttpRequestObject.responseText; > > XMLHttpRequestObject.send(null); > > /script> /head> body> a href="#" onclick="refresh(25); return false;">ссылка/a> div id="result">Сюда будет загружен ответ сервера/div> /body> /html>
Как достать с сайта определённую часть страницы
Допустим на сайте(php) есть 3 поля в которых выбирается Специальность , потом появляется выбор .
Не работают ссылки на определенную часть страницы
Когда делаю пробный одностраничный файл – все работает. Когда вставляю в нужную страницу сайта –.
Вывод новостей в определенную часть страницы
Как создать новости? Что нужно сделать, чтобы заставить их выводиться где мне надо?
Переход с одной страницы на определенную часть другой
Требуется переход с одной страницы на определенную чать другой, по принципу якоря только не в.
Поместить определенную часть веб-страницы в label
Как сделать так что бы при нажатии на кнопку выходила определенная часть веб-страницы
как обновить определённую часть страницы
На странице есть ссылка на изменение параметра ссылка. Как сделать, чтобы после клика на неё перезагружалась не вся страница, а только её часть?
Как обновить только часть страницы
МОжно ли обновить страницу но при этом например шапка и футер сайта не обновляются, а только.
Ссылка на определенную часть страницы
Есть страница, на которой есть скрытая форма. При нажатии на кнопку ОТВЕТИТЬ на комментарий эта.
Как обновить часть кода каждые N сек?
Мне нужно обновить часть кода, а именно только этот: <iframe.
Сообщение было отмечено как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
html> head> meta http-equiv="content-Type" content="text/html; charset=utf-8"/> title>Vicont/title> script type='text/javascript'> function refresh(param)< var XMLHttpRequestObject = false; if (window.XMLHttpRequest) XMLHttpRequestObject = new XMLHttpRequest(); else if(window.ActiveXobject) XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); if (XMLHttpRequestObject) < XMLHttpRequestObject.open('GET','handler.php?alb='+param); XMLHttpRequestObject.onreadystatechange = function()< if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) document.getElementById('result').innerHTML = XMLHttpRequestObject.responseText; > > XMLHttpRequestObject.send(null); > > /script> /head> body> a href="#" onclick="refresh(25); return false;">ссылка/a> div id="result">Сюда будет загружен ответ сервера/div> /body> /html>
Как достать с сайта определённую часть страницы
Допустим на сайте(php) есть 3 поля в которых выбирается Специальность , потом появляется выбор .
Не работают ссылки на определенную часть страницы
Когда делаю пробный одностраничный файл – все работает. Когда вставляю в нужную страницу сайта –.
Вывод новостей в определенную часть страницы
Как создать новости? Что нужно сделать, чтобы заставить их выводиться где мне надо?
Переход с одной страницы на определенную часть другой
Требуется переход с одной страницы на определенную чать другой, по принципу якоря только не в.
Поместить определенную часть веб-страницы в label
Как сделать так что бы при нажатии на кнопку выходила определенная часть веб-страницы