SlideShare a Scribd company logo
Темы лекции: Ajax и работа с HTTP протоколами.
Практическое задание: Ajax и работа с HTTP протоколами.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 8
http://www.slideshare.net/IgorShkulipa 2
Ajax
Ajax расшифровывается как Asynchronous Javascript And XML
(Асинхронные Javascript И XML) и технологией в строгом смысле слова
не является. Это просто аббревиатура, обозначающая подход к
созданию веб-приложений с помощью следующих технологий:
• стандартизированное представление силами XHTML и CSS;
• динамическое отображение и взаимодействие с пользователем с
помощью DOM;
• обмен и обработка данных в виде XML и JSON;
• JavaScript;
• асинхронные запросы с помощью объекта XMLHttpRequest.
Если в стандартном веб-приложении обработкой всей информации
занимается сервер, тогда как браузер отвечает только за
взаимодействие с пользователем, передачу запросов и вывод
поступившего HTML, то в Ajax-приложении между пользователем и
сервером появляется еще один посредник - движок Ajax. Он
определяет, какие запросы можно обработать "на месте", а за какими
необходимо обращаться на сервер.
http://www.slideshare.net/IgorShkulipa 3
Схема работы
http://www.slideshare.net/IgorShkulipa 4
Что можно сделать с помощью Ajax
• Небольшие элементы управления
В первую очередь AJAX полезен для небольших элементов, связанных
с элементарными действиями: добавить в корзину, подписаться, и
т.п.
• Динамическая подгрузка данных с сервера.
Например, дерево, узлы которого подгружаются по мере раскрытия.
• Незаметные для пользователя действия.
Например, при редактировании статьи - каждые 10 минут результаты
автосохраняются на сервере.
• Непрерывная подзагрузка информации с сервера.
Самый типичный пример - чат. В окошко постоянно поступают все
новые сообщения, непрерывно подгружаемые с сервера. И, опять
же, через AJAX, без перезагрузки страницы, пользователь может
отсылать сообщения на сервер.
http://www.slideshare.net/IgorShkulipa 5
Объект XMLHttpRequest
Объект XMLHttpRequest (или, сокращенно, XHR) дает возможность
браузеру делать HTTP-запросы к серверу без перезагрузки страницы.
Несмотря на слово XML в названии, XMLHttpRequest может работать с
данными в любом текстовом формате, и даже c бинарными данными.
http://www.slideshare.net/IgorShkulipa 6
Основные методы
Основные методы для посылки запросов XMLHttpRequest:
• метод open(Method, Url, async);
• метод send(data);
• событие onreadystatechange;
Обычная последовательность вызова – это:
• Открыть соединение (open)
• Описать обработчик onreadystatechange
• Отправить запрос (send)
http://www.slideshare.net/IgorShkulipa 7
Методы open, send и abort
• open(method, URL, async, user, password) задаёт основные параметры запроса:
• method — HTTP-метод. Как правило, используется GET либо POST, хотя
доступны и более экзотические, вроде TRACE/DELETE/PUT и т.п.
• URL — адрес запроса. Можно использовать не только HTTP/HTTPS, но и
другие протоколы, например ftp:// и file://. При этом есть ограничения
безопасности, называемые «Same Origin Policy»: запрос со страницы можно
отправлять только на тот же протокол://домен:порт, с которого она пришла.
• async — если установлено в false, то запрос производится синхронно,
если true — асинхронно.
• user, password — логин и пароль для HTTP-авторизации.
Обязательны только первые два аргумента. Метод open сам по себе не открывает
соединение, а только инициализирует соединение.
• send(body) отправляет запрос на сервер. В body находится тело запроса. Не у
всякого запроса есть тело, например у GET-запросов тела нет, в таком случае
передаётся null или пустая строка. С другой стороны, в POST основные данные
как раз передаются через body.
• abort() - прерывает выполнение запроса.
http://www.slideshare.net/IgorShkulipa 8
Синхронный вызов
Синхронный вызов XMLHttpRequest происходит, если параметр async
равен false.
В этом случае страница «подвисает»: скрипт ждёт ответа сервера, а
затем продолжается — и ответ сервера уже можно использовать.
http://www.slideshare.net/IgorShkulipa 9
Событие readystatechange
Событие readystatechange происходит несколько раз в процессе
отсылки и получения ответа.
При этом можно посмотреть «текущее состояние запроса» в свойстве
readyState, которое принимает значения от 0 до 4:
• UNSENT = 0; - начальное состояние
• OPENED = 1; - вызван open
• HEADERS_RECEIVED = 2; - получены заголовки
• LOADING = 3; - загружается тело
• DONE = 4; - запрос завершён
Надёжно и кросс-браузерно работает только последнее состояние: 4 -
запрос завершён.
Типичная проверка конца запроса:
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return; // запрос ещё не завершён
// .. обработать завершение запроса, проверить ошибки
}
http://www.slideshare.net/IgorShkulipa 10
Свойства status и statusText
Эти свойства содержат HTTP-статус ответа и его описание, например:
• status - statusText
• 200 - OK
• 404 - Not Found
• 500 - Internal Server Error
Когда ошибка не связана с кодом ответа сервера (например, не удалось
соединение), свойство status равно нулю, а в statusText — пустая
строка.
http://www.slideshare.net/IgorShkulipa 11
Свойства responseText и responseXML
После завершения запроса становится доступно свойство responseText,
которое содержит текст ответа сервера. В современных браузерах оно
доступно даже при неоконченном запросе и содержит текст,
полученный к текущему моменту.
Если сервер прислал ответ с Content-Type: text/xml, то браузер
превращает его в полноценный документ и записывает в
responseXML.
Если его нет, то браузер не станет обрабатывать ответ как XML, и
свойство responseXML будет пустым.
http://www.slideshare.net/IgorShkulipa 12
Заголовки
Для работы с заголовками есть 3 метода:
• setRequestHeader(name, value) устанавливает заголовок name
запроса со значением value. Если заголовок с таким name уже есть —
он заменяется.
xhr.setRequestHeader('Content-Type', 'text/xml');
• getResponseHeader(name) возвращает значение заголовка ответа
name.
xhr.getResponseHeader('Content-Type') == 'text/plain'
• getAllResponseHeaders() возвращает все заголовки ответа.
Заголовки возвращаются в виде единой строки, например:
Cache-Control: max-age=31536000
Content-Length: 4260
Content-Type: image/png
Date: Sat, 08 Sep 2012 16:53:16 GMT
http://www.slideshare.net/IgorShkulipa 13
Таймаут
Максимальную продолжительность запроса можно задать свойством
timeout:
xhr.timeout = 30000; // 30 секунд
При превышении этого времени запрос будет оборван и сгенерировано
событие ontimeout.
http://www.slideshare.net/IgorShkulipa 14
Другие события
• onerror - Ошибка при выполнении запроса.
• onload - Запрос успешно завершён.
• onprogress - Браузер получил очередной пакет данных. Можно
прочитать текущие полученные данные в responseText.
• onabort - Запрос отменён вызовом abort().
• onloadstart - Запрос начат.
• onloadend - Запрос окончен, возможно с ошибкой.
http://www.slideshare.net/IgorShkulipa 15
Пример. HTML
<!DOCTYPE html> <html> <head>
<title>JavaScript Canvas and Cookie Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/site.css" type="text/css" />
<script type="text/javascript" src="js/functions.js"> </script>
<script type="text/javascript" src="js/ajax.js"> </script>
<body>
<div id="page">
<div id="head">
<div id="logo">
<img src="img/logo.png" height="94" width="100" alt="logo">
</div>
<div id="title">JavaScript Canvas and Cookie Example</div>
</div>
<div class="main">
<div class="innermain">
<div id="menu" class="menu">
<a href="#" id="mi1" class="menuitem">Ajax</a>
<input type="text" id="searchcountry" />
</div>
<div id="content" class="content">
</div> </div> </div>
<div id="foot">
<p onmouseover="this.className = 'pmouseover'"
onmouseout="this.className = 'pmouseout'">
Move Closer to Change the Style</p>
</div> </div>
http://www.slideshare.net/IgorShkulipa 16
Пример. HTML
<script type="text/javascript">
var mi1 = document.getElementById("mi1");
mi1.addEventListener("click", startAjax, false);
var ctxt = document.getElementById("searchcountry");
ctxt.addEventListener("keyup", searchCountryAjax,
false);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 17
Файлы 1.xml и countries.txt
http://www.slideshare.net/IgorShkulipa 18
Пример. Кроссбраузерная функция получения объекта.
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
http://www.slideshare.net/IgorShkulipa 19
Пример Ajax
function getXML() {
var xmlHttp = getXmlHttp();
xmlHttp.open("GET", "./files/1.xml", true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById("content").innerHTML += "<pre>" +
xmlHttp.responseText + "</pre>";
document.getElementById("content").innerHTML +=
"<br/><br/>";
document.getElementById("content").innerHTML += "<p>" +
xmlHttp.responseText + "</p>";
}
}
}
xmlHttp.send(null);
}
var interval;
function startAjax() {
interval = window.setInterval(getXML, 1000, null);
window.setTimeout(function () { window.clearInterval(interval); },
5000, null);
}
http://www.slideshare.net/IgorShkulipa 20
Результат
http://www.slideshare.net/IgorShkulipa 21
Пример Ajax
function searchCountryAjax() {
var xmlHttp = getXmlHttp();
xmlHttp.open("GET", "./files/countries.txt", true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById("content").innerHTML = "<ul>";
var ctrs = xmlHttp.responseText.split("n");
for (var i = 0; i < ctrs.length; i++) {
if (ctrs[i].toLowerCase()
.startsWith(document
.getElementById("searchcountry")
.value.toLowerCase())) {
document.getElementById("content").innerHTML +=
"<li>" + ctrs[i] + "</li>";
}
}
document.getElementById("content").innerHTML += "</ul>";
}
}
}
xmlHttp.send(null);
}
http://www.slideshare.net/IgorShkulipa 22
Результат
http://www.slideshare.net/IgorShkulipa 23
Лабораторная работа №5.
К персональной странице добавить Ajax-функциональность.
Например, подгрузка статей из файла по необходимости.

More Related Content

What's hot

Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
Timur Shemsedinov
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
Igor Shkulipa
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
Igor Shkulipa
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
Igor Shkulipa
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
Roman Dvornov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
Fedor Malyshkin
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
Roman Dvornov
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ontico
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Basis.js - Production Ready Framework
Basis.js - Production Ready FrameworkBasis.js - Production Ready Framework
Basis.js - Production Ready Framework
Сергей Мелюков
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
MoscowJS
 
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
AvitoTech
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
Anton Moiseenko
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Roman Dvornov
 

What's hot (20)

Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Basis.js - Production Ready Framework
Basis.js - Production Ready FrameworkBasis.js - Production Ready Framework
Basis.js - Production Ready Framework
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 

Viewers also liked

Correos electronicos
Correos electronicosCorreos electronicos
Correos electronicos
JSGG
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9vijay bhosekar
 
Investors | How it works
Investors | How it worksInvestors | How it works
Investors | How it worksGREXdotIN
 
Production diary 7
Production diary 7Production diary 7
Production diary 7
Laila Jaleel
 
Production diary 15
Production diary 15Production diary 15
Production diary 15
Laila Jaleel
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled PresentationKamilla Paiva
 
Effortless Energy Outreach Plan
Effortless Energy Outreach PlanEffortless Energy Outreach Plan
Effortless Energy Outreach PlanBohua Li
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
Igor Shkulipa
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
Igor Shkulipa
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
Igor Shkulipa
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
Igor Shkulipa
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
Igor Shkulipa
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business School
Rick Petford
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
Igor Shkulipa
 
C++ Базовый. Занятие 06.
C++ Базовый. Занятие 06.C++ Базовый. Занятие 06.
C++ Базовый. Занятие 06.
Igor Shkulipa
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
Igor Shkulipa
 

Viewers also liked (20)

M. Farnen Resume 2015
M. Farnen Resume 2015M. Farnen Resume 2015
M. Farnen Resume 2015
 
Correos electronicos
Correos electronicosCorreos electronicos
Correos electronicos
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
 
Investors | How it works
Investors | How it worksInvestors | How it works
Investors | How it works
 
Production diary 7
Production diary 7Production diary 7
Production diary 7
 
Production diary 15
Production diary 15Production diary 15
Production diary 15
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Effortless Energy Outreach Plan
Effortless Energy Outreach PlanEffortless Energy Outreach Plan
Effortless Energy Outreach Plan
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
 
BIG BEN
BIG BENBIG BEN
BIG BEN
 
Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)
 
SAEEDcv.
SAEEDcv.SAEEDcv.
SAEEDcv.
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business School
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
C++ Базовый. Занятие 06.
C++ Базовый. Занятие 06.C++ Базовый. Занятие 06.
C++ Базовый. Занятие 06.
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 

Similar to JavaScript Базовый. Занятие 08.

Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения7bits
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
lectureswww lectureswww
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
Igor Shkulipa
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервереYandex
 
servlets.pdf
servlets.pdfservlets.pdf
servlets.pdf
ssuser0562f1
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложений
beched
 
Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10
OWASP Kyiv
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
JavaDayUA
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9Technopark
 
Web весна 2013 лекция 11
Web весна 2013 лекция 11Web весна 2013 лекция 11
Web весна 2013 лекция 11Technopark
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
 
servlets1.pdf
servlets1.pdfservlets1.pdf
servlets1.pdf
ssuser0562f1
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
Andrey Dolinin
 
Иван Бибилов: http-протокол
Иван Бибилов: http-протоколИван Бибилов: http-протокол
Иван Бибилов: http-протоколYandex
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 

Similar to JavaScript Базовый. Занятие 08. (20)

Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
WWW
WWWWWW
WWW
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
 
servlets.pdf
servlets.pdfservlets.pdf
servlets.pdf
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложений
 
Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
 
Web весна 2013 лекция 11
Web весна 2013 лекция 11Web весна 2013 лекция 11
Web весна 2013 лекция 11
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
servlets1.pdf
servlets1.pdfservlets1.pdf
servlets1.pdf
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Иван Бибилов: http-протокол
Иван Бибилов: http-протоколИван Бибилов: http-протокол
Иван Бибилов: http-протокол
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
Igor Shkulipa
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 

JavaScript Базовый. Занятие 08.

  • 1. Темы лекции: Ajax и работа с HTTP протоколами. Практическое задание: Ajax и работа с HTTP протоколами. Тренер: Игорь Шкулипа, к.т.н. JavaScript. Базовый курс Занятие 8
  • 2. http://www.slideshare.net/IgorShkulipa 2 Ajax Ajax расшифровывается как Asynchronous Javascript And XML (Асинхронные Javascript И XML) и технологией в строгом смысле слова не является. Это просто аббревиатура, обозначающая подход к созданию веб-приложений с помощью следующих технологий: • стандартизированное представление силами XHTML и CSS; • динамическое отображение и взаимодействие с пользователем с помощью DOM; • обмен и обработка данных в виде XML и JSON; • JavaScript; • асинхронные запросы с помощью объекта XMLHttpRequest. Если в стандартном веб-приложении обработкой всей информации занимается сервер, тогда как браузер отвечает только за взаимодействие с пользователем, передачу запросов и вывод поступившего HTML, то в Ajax-приложении между пользователем и сервером появляется еще один посредник - движок Ajax. Он определяет, какие запросы можно обработать "на месте", а за какими необходимо обращаться на сервер.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Что можно сделать с помощью Ajax • Небольшие элементы управления В первую очередь AJAX полезен для небольших элементов, связанных с элементарными действиями: добавить в корзину, подписаться, и т.п. • Динамическая подгрузка данных с сервера. Например, дерево, узлы которого подгружаются по мере раскрытия. • Незаметные для пользователя действия. Например, при редактировании статьи - каждые 10 минут результаты автосохраняются на сервере. • Непрерывная подзагрузка информации с сервера. Самый типичный пример - чат. В окошко постоянно поступают все новые сообщения, непрерывно подгружаемые с сервера. И, опять же, через AJAX, без перезагрузки страницы, пользователь может отсылать сообщения на сервер.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Объект XMLHttpRequest Объект XMLHttpRequest (или, сокращенно, XHR) дает возможность браузеру делать HTTP-запросы к серверу без перезагрузки страницы. Несмотря на слово XML в названии, XMLHttpRequest может работать с данными в любом текстовом формате, и даже c бинарными данными.
  • 6. http://www.slideshare.net/IgorShkulipa 6 Основные методы Основные методы для посылки запросов XMLHttpRequest: • метод open(Method, Url, async); • метод send(data); • событие onreadystatechange; Обычная последовательность вызова – это: • Открыть соединение (open) • Описать обработчик onreadystatechange • Отправить запрос (send)
  • 7. http://www.slideshare.net/IgorShkulipa 7 Методы open, send и abort • open(method, URL, async, user, password) задаёт основные параметры запроса: • method — HTTP-метод. Как правило, используется GET либо POST, хотя доступны и более экзотические, вроде TRACE/DELETE/PUT и т.п. • URL — адрес запроса. Можно использовать не только HTTP/HTTPS, но и другие протоколы, например ftp:// и file://. При этом есть ограничения безопасности, называемые «Same Origin Policy»: запрос со страницы можно отправлять только на тот же протокол://домен:порт, с которого она пришла. • async — если установлено в false, то запрос производится синхронно, если true — асинхронно. • user, password — логин и пароль для HTTP-авторизации. Обязательны только первые два аргумента. Метод open сам по себе не открывает соединение, а только инициализирует соединение. • send(body) отправляет запрос на сервер. В body находится тело запроса. Не у всякого запроса есть тело, например у GET-запросов тела нет, в таком случае передаётся null или пустая строка. С другой стороны, в POST основные данные как раз передаются через body. • abort() - прерывает выполнение запроса.
  • 8. http://www.slideshare.net/IgorShkulipa 8 Синхронный вызов Синхронный вызов XMLHttpRequest происходит, если параметр async равен false. В этом случае страница «подвисает»: скрипт ждёт ответа сервера, а затем продолжается — и ответ сервера уже можно использовать.
  • 9. http://www.slideshare.net/IgorShkulipa 9 Событие readystatechange Событие readystatechange происходит несколько раз в процессе отсылки и получения ответа. При этом можно посмотреть «текущее состояние запроса» в свойстве readyState, которое принимает значения от 0 до 4: • UNSENT = 0; - начальное состояние • OPENED = 1; - вызван open • HEADERS_RECEIVED = 2; - получены заголовки • LOADING = 3; - загружается тело • DONE = 4; - запрос завершён Надёжно и кросс-браузерно работает только последнее состояние: 4 - запрос завершён. Типичная проверка конца запроса: xhr.onreadystatechange = function() { if (xhr.readyState != 4) return; // запрос ещё не завершён // .. обработать завершение запроса, проверить ошибки }
  • 10. http://www.slideshare.net/IgorShkulipa 10 Свойства status и statusText Эти свойства содержат HTTP-статус ответа и его описание, например: • status - statusText • 200 - OK • 404 - Not Found • 500 - Internal Server Error Когда ошибка не связана с кодом ответа сервера (например, не удалось соединение), свойство status равно нулю, а в statusText — пустая строка.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Свойства responseText и responseXML После завершения запроса становится доступно свойство responseText, которое содержит текст ответа сервера. В современных браузерах оно доступно даже при неоконченном запросе и содержит текст, полученный к текущему моменту. Если сервер прислал ответ с Content-Type: text/xml, то браузер превращает его в полноценный документ и записывает в responseXML. Если его нет, то браузер не станет обрабатывать ответ как XML, и свойство responseXML будет пустым.
  • 12. http://www.slideshare.net/IgorShkulipa 12 Заголовки Для работы с заголовками есть 3 метода: • setRequestHeader(name, value) устанавливает заголовок name запроса со значением value. Если заголовок с таким name уже есть — он заменяется. xhr.setRequestHeader('Content-Type', 'text/xml'); • getResponseHeader(name) возвращает значение заголовка ответа name. xhr.getResponseHeader('Content-Type') == 'text/plain' • getAllResponseHeaders() возвращает все заголовки ответа. Заголовки возвращаются в виде единой строки, например: Cache-Control: max-age=31536000 Content-Length: 4260 Content-Type: image/png Date: Sat, 08 Sep 2012 16:53:16 GMT
  • 13. http://www.slideshare.net/IgorShkulipa 13 Таймаут Максимальную продолжительность запроса можно задать свойством timeout: xhr.timeout = 30000; // 30 секунд При превышении этого времени запрос будет оборван и сгенерировано событие ontimeout.
  • 14. http://www.slideshare.net/IgorShkulipa 14 Другие события • onerror - Ошибка при выполнении запроса. • onload - Запрос успешно завершён. • onprogress - Браузер получил очередной пакет данных. Можно прочитать текущие полученные данные в responseText. • onabort - Запрос отменён вызовом abort(). • onloadstart - Запрос начат. • onloadend - Запрос окончен, возможно с ошибкой.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Пример. HTML <!DOCTYPE html> <html> <head> <title>JavaScript Canvas and Cookie Example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="css/site.css" type="text/css" /> <script type="text/javascript" src="js/functions.js"> </script> <script type="text/javascript" src="js/ajax.js"> </script> <body> <div id="page"> <div id="head"> <div id="logo"> <img src="img/logo.png" height="94" width="100" alt="logo"> </div> <div id="title">JavaScript Canvas and Cookie Example</div> </div> <div class="main"> <div class="innermain"> <div id="menu" class="menu"> <a href="#" id="mi1" class="menuitem">Ajax</a> <input type="text" id="searchcountry" /> </div> <div id="content" class="content"> </div> </div> </div> <div id="foot"> <p onmouseover="this.className = 'pmouseover'" onmouseout="this.className = 'pmouseout'"> Move Closer to Change the Style</p> </div> </div>
  • 16. http://www.slideshare.net/IgorShkulipa 16 Пример. HTML <script type="text/javascript"> var mi1 = document.getElementById("mi1"); mi1.addEventListener("click", startAjax, false); var ctxt = document.getElementById("searchcountry"); ctxt.addEventListener("keyup", searchCountryAjax, false); </script> </body> </html>
  • 18. http://www.slideshare.net/IgorShkulipa 18 Пример. Кроссбраузерная функция получения объекта. function getXmlHttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; }
  • 19. http://www.slideshare.net/IgorShkulipa 19 Пример Ajax function getXML() { var xmlHttp = getXmlHttp(); xmlHttp.open("GET", "./files/1.xml", true); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById("content").innerHTML += "<pre>" + xmlHttp.responseText + "</pre>"; document.getElementById("content").innerHTML += "<br/><br/>"; document.getElementById("content").innerHTML += "<p>" + xmlHttp.responseText + "</p>"; } } } xmlHttp.send(null); } var interval; function startAjax() { interval = window.setInterval(getXML, 1000, null); window.setTimeout(function () { window.clearInterval(interval); }, 5000, null); }
  • 21. http://www.slideshare.net/IgorShkulipa 21 Пример Ajax function searchCountryAjax() { var xmlHttp = getXmlHttp(); xmlHttp.open("GET", "./files/countries.txt", true); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById("content").innerHTML = "<ul>"; var ctrs = xmlHttp.responseText.split("n"); for (var i = 0; i < ctrs.length; i++) { if (ctrs[i].toLowerCase() .startsWith(document .getElementById("searchcountry") .value.toLowerCase())) { document.getElementById("content").innerHTML += "<li>" + ctrs[i] + "</li>"; } } document.getElementById("content").innerHTML += "</ul>"; } } } xmlHttp.send(null); }
  • 23. http://www.slideshare.net/IgorShkulipa 23 Лабораторная работа №5. К персональной странице добавить Ajax-функциональность. Например, подгрузка статей из файла по необходимости.