SlideShare a Scribd company logo
AJAX
AJAX (Asynchronous Javascript And Xml) –
технологія взаємодії з сервером, яка не
потребує перезавантаження всієї сторінки
Докладніше. AJAX:
•Вміє читати дані з сервера навіть після того, як
сторінка вже завантажена
•Оновлює дані на сторінці без
перезавантаження сторінки
•Надсилає дані на сервер у фоновому режимі
Механізм роботи AJAX
1. На сторінці відбувається подія
(завантажується сторінка, натискається
кнопка тощо)
2. JavaScript створює об’єкт XMLHttpRequest
3. Об’єкт XMLHttpRequest надсилає запит на
сервер
4. Сервер обробляє запит
5. Сарвер надсилає на сторінку відповідь
6. JavaScript читає відповідь
7. JavaScript виконує відповідну дію (наприклад,
оновлення інформації на сторінці)
Об’єкт XMLHttpRequest
Об’єкт XMLHttpRequest можна використовувати
для обміну даними з сервером “за сценою”.
Об’єкт XMLHttpRequest вбудований у сучасні
браузери.
Синтаксис:
variable = new XMLHttpRequest();
Приклад:
var xhttp = new XMLHttpRequest();
З міркувань безпеки веб-сторіка і XML-файл,
який сторінка намагається завантажити,
повинні знаходитись на тому самому
сервері.
Щоб надіслати запит серверу,
використовуються методи об’єкта
XMLHttpRequest open() і send():
xhttp.open("GET", "demo.txt", true);
xhttp.send();
Метод open():
open(method, url, async)
•method: тип запиту: GET або POST
•url: адреса сервера чи файла
•async: true (асинронно) or false (синхронно)
Метод send():
send() – надсилає запит серверу GET-
методом
send(string) – надсилає запит серверу POST-
методом
GET- і POST-методи – ознайомитись самостійно.
Простий приклад GET-запиту
xhttp.open("GET", "data/demo.txt",
true);
xhttp.send();
Щоб уникнути кешування, можна писати так:
xhttp.open("GET",
"data/demo.txt?t=" + Math.random(),
true);
xhttp.send();
Передавати інформацію у GET-запиті можна
за таким зразком:
xhttp.open("GET",
"data/demo.txt?user=Ivan&age=28",
true);
xhttp.send();
Простий приклад POST-запиту
xhttp.open("POST", "demo.txt", true);
xhttp.send();
Щоб передати POST-методом дані,
наприклад, з HTML-форми, треба додати
HTTP-заголовок методом setRequestHeader
(). Дані надсилаються методом send():
xhttp.open("POST", "test.asp", true);
xhttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xhttp.send("user=Ivan&age=28");
url – файл на сервері
xhttp.open("GET", "test.asp", true);
xhttp.send();
Файл може бути будь-якого типу: .txt, .xml,
або серверні програмні скрипти .asp, .php.
При асинхронному запиті
xhttp.open("GET", "ajax_test.asp", true);
JavaScript не зобов’язаний чекати відповіді
сервера. Натомість в процесі очікування він
може виконувати інші скрипти чи опрацювати
відповідь при її надходженні.
Властивість onreadystatechange:
З об’єктом XMLHttpRequest можна визначити
функцію, яка буде виконуватись, коли запит
отримає відповідь. Ця функція визначається
у властивості onreadystatechange об’єкта
XMLHttpResponse:
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status
== 200) {
document.getElementById("demo").innerHT
ML = this.responseText;
}
};
xhttp.open("GET", "info.txt", true);
xhttp.send();
Відгук сервера
Властивості об’єкта XMLHttpRequest:
onreadystatechange – визначає функцію, яка викликається, коли
властивість readyState змінюється
readyState – показує стан об’єкта XMLHttpRequest.
0: запит не ініціалізовано
1: встановлено з’єднання з сервером
2: запит отримано
3: запит обробляється
4: запит завершено і відповідь готова
status – основні значення:
200: "OK"
403: "Forbidden"
404: "Page not found"
statusText – повертає status-text (наприклад, "OK" або "Not
Found")
Функція onreadystatechange викликається кожного
разу, коли змінюється readyState.
Коли readyState стає рівним 4, а status – 200,
відгук готовий:
<button type="button"
onclick="loadDoc()">Click</button>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200)
{
document.getElementById("demo").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "info.txt", true);
xhttp.send();
}
Задача 83.0
Створіть файл anekdot.txt, в який
помістіть 5-7 анекдотів, розділивши їх
символами “*****”. Збережіть у кодуванні
utf-8.
Створіть html-сторінку з кнопкою “Читати
анекдот” і DIV’ом.
Натискання на кнопку повинно
завантажувати у DIV вміст файлу
anekdot.txt. Подбайте про естетику.
Розв’язок
<button type="button" onclick="loadDoc()">Читати
анекдот</button>
<div id="demo"></div>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
demo.innerHTML = this.responseText;
}
};
xhttp.open("POST", "data/anekdot.txt", true);
xhttp.send();
}
</script>
Задача 83.1
Змініть код так, щоб у DIV виводився
тільки один з цих анекдотів, по порядку,
щоразу новий.
Розв’язок
<script>
var counter = 0;
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200)
{
var allText = this.responseText;
var arr = allText.split('*****');
demo.innerHTML = arr[counter%arr.length];
counter++;
}
};
xhttp.open("POST", "data/anekdot.txt", true);
xhttp.send();
}
</script>
Задача 83.2
Домашнє завдання:
Передбачте дві кнопки, які дозволять
“гортати” анекдоти в прямому і
зворотному напрямках.
Callback Function
Callback-функція – це функція, яка передається як
параметр іншій функції.
Якщо ви на сайті маєте більше ніж одне AJAX-завдання,
треба створити одну функцію для виконання об’єкту
XMLHttpRequest і по одній функції для кожного AJAX-
завдання. Виклик функції повинен містити URL і ім’я
функції, яка має викликатись, коли відповідь з сервера
готова.
Приклад (HTML-частина сторінки):
<button type="button" onclick="loadDoc('data/demo1.txt',
myFunction)">Запит1</button>
<button type="button" onclick="loadDoc('data/demo2.txt',
myFunction)">Запит2</button>
<p id="demo"></p>
JavaScript-частина:
<script>
function loadDoc(url, cFunction) {
var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
cFunction(this);
}
};
xhttp.open("GET", url, true);
xhttp.send();
}
function myFunction(xhttp) {
demo.innerHTML = xhttp.responseText;
}
</script>
Властивості Server Response
responseText – отримує дані як рядок
responseXML – отримує дані у XML-форматі
Приклади:
demo.innerHTML = xhttp.responseText; //
див. попередні приклади
xmlDoc = xhttp.responseXML;
Об’єкт XML HttpRequest містить вбудований
XML-парсер.
Властивість responseXML повертає з
сервера відповідь у вигляді XML DOM
об’єкта.
Приклад:
<p id="demo"></p>
<script>
var xhttp, xmlDoc, txt, x, i;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
xmlDoc = this.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("AUTHOR");
for (i = 0; i < x.length; i++) {
txt = txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
}
};
xhttp.open("GET", "data/books2.xml", true);
xhttp.send();
</script>
Приклад 2. HTML-частина:
<button type="button" id="btn_autor"
onclick="loadXML(event)">Автори</button>
<button type="button" id="btn_title"
onclick="loadXML(event)">Книжки</button>
<p id="demo"></p>
Приклад 2. JavaScript-частина:
<script>
function loadXML(event) {
var xhttp, xmlDoc, txt, x, i, tagName;
if (event.target.id == "btn_autor") tagName = "AUTHOR";
if (event.target.id == "btn_title") tagName = "TITLE";
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
xmlDoc = this.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName(tagName);
for (i = 0; i < x.length; i++) {
txt = txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
}
};
xhttp.open("GET", "data/books2.xml", true);
xhttp.send();
}
</script>
Приклад 3. Навігація по книжках
<div id='showBook'></div><br>
<input type="button" onclick="previous()" value="<<">
<input type="button" onclick="next()" value=">>">
<script>
var i = 0;
displayBook(i);
function next() {
if (i < x.length-1) {
i++;
displayBook(i);
}
}
function previous() {
if (i > 0) {
i--;
displayBook(i);
}
} // див наступну сторінку
Приклад 3 (продовження)
function displayBook(i) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this, i);
}
};
xmlhttp.open("GET", "data/books2.xml", true);
xmlhttp.send();
}
function myFunction(xml, i) {
var xmlDoc = xml.responseXML;
x = xmlDoc.getElementsByTagName("BOOK");
showBook.innerHTML = "Автор: " +
x[i].getElementsByTagName("AUTHOR")[0].childNodes[0].nodeValue
+ "<br>Назва: " +
x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
"<br>Сторінок: " +
x[i].getElementsByTagName("PAGES")[0].childNodes[0].nodeValue;
}
</script>
Задача 84
• Завантажте файл goo.gl/KQwAqs
• Виправте помилки, щоб зробити
додаток працездатним.
• Додайте у XML-файл дані про рік
видання книги (придумайте самі).
• Внесіть зміни у HTML-файл, щоб
додана інформація відображалась

More Related Content

Similar to Theme20_ajax

Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"
Fwdays
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
OdessaJS Conf
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 
tsql
tsqltsql
tsql
eleksdev
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
Igor Bronovskyy
 
Lec11 користувацькi елементи керування
Lec11 користувацькi елементи керуванняLec11 користувацькi елементи керування
Lec11 користувацькi елементи керування
cit-cit
 
"How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk "How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk
Fwdays
 
Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11
Олег Вілігурський
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. Threads
Andrii Hladkyi
 
Lec10 11 ado-net
Lec10 11 ado-netLec10 11 ado-net
Lec10 11 ado-net
cit-cit
 

Similar to Theme20_ajax (15)

ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"
 
ASP.Net part 2
ASP.Net part 2ASP.Net part 2
ASP.Net part 2
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
tsql
tsqltsql
tsql
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
 
Multithreading and parallelism
Multithreading and parallelismMultithreading and parallelism
Multithreading and parallelism
 
Lec11 користувацькi елементи керування
Lec11 користувацькi елементи керуванняLec11 користувацькi елементи керування
Lec11 користувацькi елементи керування
 
"How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk "How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk
 
Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. Threads
 
Lec10 11 ado-net
Lec10 11 ado-netLec10 11 ado-net
Lec10 11 ado-net
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
L l13
L l13L l13
L l13
 

More from Олег Вілігурський

JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
Олег Вілігурський
 
Python для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботиPython для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботи
Олег Вілігурський
 
Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.
Олег Вілігурський
 
Python for physicists. introduction
Python for physicists. introductionPython for physicists. introduction
Python for physicists. introduction
Олег Вілігурський
 
Theme23-oop2(end)
Theme23-oop2(end)Theme23-oop2(end)
Theme23-oop2
Theme23-oop2Theme23-oop2
Theme22-OOP
Theme22-OOPTheme22-OOP
Theme19_css
Theme19_cssTheme19_css
Theme18_css
Theme18_cssTheme18_css
Theme17a css
Theme17a cssTheme17a css
Theme17
Theme17Theme17
Theme16
Theme16Theme16
Coding for Future in Lutsk. JavaScript. Part 15
Coding for Future in Lutsk. JavaScript. Part 15Coding for Future in Lutsk. JavaScript. Part 15
Coding for Future in Lutsk. JavaScript. Part 15
Олег Вілігурський
 
Coding for Future in Lutsk. JavaScript. Part 14
Coding for Future in Lutsk. JavaScript. Part 14Coding for Future in Lutsk. JavaScript. Part 14
Coding for Future in Lutsk. JavaScript. Part 14
Олег Вілігурський
 
Coding for Future in Lutsk. JavaScript. Part 13
 Coding for Future in Lutsk. JavaScript. Part 13 Coding for Future in Lutsk. JavaScript. Part 13
Coding for Future in Lutsk. JavaScript. Part 13
Олег Вілігурський
 
Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12
Олег Вілігурський
 
Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10
Олег Вілігурський
 

More from Олег Вілігурський (20)

JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
 
Python для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботиPython для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботи
 
Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.
 
Python for physicists. introduction
Python for physicists. introductionPython for physicists. introduction
Python for physicists. introduction
 
Theme25-jQuery2
Theme25-jQuery2Theme25-jQuery2
Theme25-jQuery2
 
Theme24-jQuery
Theme24-jQueryTheme24-jQuery
Theme24-jQuery
 
Theme23-oop2(end)
Theme23-oop2(end)Theme23-oop2(end)
Theme23-oop2(end)
 
Theme23-oop2
Theme23-oop2Theme23-oop2
Theme23-oop2
 
Theme22-OOP
Theme22-OOPTheme22-OOP
Theme22-OOP
 
Theme21_json
Theme21_jsonTheme21_json
Theme21_json
 
Theme19_css
Theme19_cssTheme19_css
Theme19_css
 
Theme18_css
Theme18_cssTheme18_css
Theme18_css
 
Theme17a css
Theme17a cssTheme17a css
Theme17a css
 
Theme17
Theme17Theme17
Theme17
 
Theme16
Theme16Theme16
Theme16
 
Coding for Future in Lutsk. JavaScript. Part 15
Coding for Future in Lutsk. JavaScript. Part 15Coding for Future in Lutsk. JavaScript. Part 15
Coding for Future in Lutsk. JavaScript. Part 15
 
Coding for Future in Lutsk. JavaScript. Part 14
Coding for Future in Lutsk. JavaScript. Part 14Coding for Future in Lutsk. JavaScript. Part 14
Coding for Future in Lutsk. JavaScript. Part 14
 
Coding for Future in Lutsk. JavaScript. Part 13
 Coding for Future in Lutsk. JavaScript. Part 13 Coding for Future in Lutsk. JavaScript. Part 13
Coding for Future in Lutsk. JavaScript. Part 13
 
Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12
 
Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10
 

Recently uploaded

Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdfПідсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
ssuser7541ef1
 
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdfГлавлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
olaola5673
 
29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx
Репетитор Історія України
 
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdfKUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
Olga Kudriavtseva
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
olaola5673
 
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
estet13
 
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdfLOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
Olga Kudriavtseva
 
Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»
Vinnytsia Regional Universal Scientific Library named after Valentin Otamanovsky
 
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdfPOPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
Olga Kudriavtseva
 
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
tetiana1958
 

Recently uploaded (10)

Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdfПідсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
 
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdfГлавлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
 
29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx
 
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdfKUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
 
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
 
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdfLOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
 
Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»
 
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdfPOPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
 
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
 

Theme20_ajax

  • 2. AJAX (Asynchronous Javascript And Xml) – технологія взаємодії з сервером, яка не потребує перезавантаження всієї сторінки Докладніше. AJAX: •Вміє читати дані з сервера навіть після того, як сторінка вже завантажена •Оновлює дані на сторінці без перезавантаження сторінки •Надсилає дані на сервер у фоновому режимі
  • 3. Механізм роботи AJAX 1. На сторінці відбувається подія (завантажується сторінка, натискається кнопка тощо) 2. JavaScript створює об’єкт XMLHttpRequest 3. Об’єкт XMLHttpRequest надсилає запит на сервер 4. Сервер обробляє запит 5. Сарвер надсилає на сторінку відповідь 6. JavaScript читає відповідь 7. JavaScript виконує відповідну дію (наприклад, оновлення інформації на сторінці)
  • 4. Об’єкт XMLHttpRequest Об’єкт XMLHttpRequest можна використовувати для обміну даними з сервером “за сценою”. Об’єкт XMLHttpRequest вбудований у сучасні браузери. Синтаксис: variable = new XMLHttpRequest(); Приклад: var xhttp = new XMLHttpRequest();
  • 5. З міркувань безпеки веб-сторіка і XML-файл, який сторінка намагається завантажити, повинні знаходитись на тому самому сервері. Щоб надіслати запит серверу, використовуються методи об’єкта XMLHttpRequest open() і send(): xhttp.open("GET", "demo.txt", true); xhttp.send();
  • 6. Метод open(): open(method, url, async) •method: тип запиту: GET або POST •url: адреса сервера чи файла •async: true (асинронно) or false (синхронно) Метод send(): send() – надсилає запит серверу GET- методом send(string) – надсилає запит серверу POST- методом GET- і POST-методи – ознайомитись самостійно.
  • 7. Простий приклад GET-запиту xhttp.open("GET", "data/demo.txt", true); xhttp.send(); Щоб уникнути кешування, можна писати так: xhttp.open("GET", "data/demo.txt?t=" + Math.random(), true); xhttp.send();
  • 8. Передавати інформацію у GET-запиті можна за таким зразком: xhttp.open("GET", "data/demo.txt?user=Ivan&age=28", true); xhttp.send();
  • 9. Простий приклад POST-запиту xhttp.open("POST", "demo.txt", true); xhttp.send(); Щоб передати POST-методом дані, наприклад, з HTML-форми, треба додати HTTP-заголовок методом setRequestHeader (). Дані надсилаються методом send(): xhttp.open("POST", "test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("user=Ivan&age=28");
  • 10. url – файл на сервері xhttp.open("GET", "test.asp", true); xhttp.send(); Файл може бути будь-якого типу: .txt, .xml, або серверні програмні скрипти .asp, .php. При асинхронному запиті xhttp.open("GET", "ajax_test.asp", true); JavaScript не зобов’язаний чекати відповіді сервера. Натомість в процесі очікування він може виконувати інші скрипти чи опрацювати відповідь при її надходженні.
  • 11. Властивість onreadystatechange: З об’єктом XMLHttpRequest можна визначити функцію, яка буде виконуватись, коли запит отримає відповідь. Ця функція визначається у властивості onreadystatechange об’єкта XMLHttpResponse: xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHT ML = this.responseText; } }; xhttp.open("GET", "info.txt", true); xhttp.send();
  • 12. Відгук сервера Властивості об’єкта XMLHttpRequest: onreadystatechange – визначає функцію, яка викликається, коли властивість readyState змінюється readyState – показує стан об’єкта XMLHttpRequest. 0: запит не ініціалізовано 1: встановлено з’єднання з сервером 2: запит отримано 3: запит обробляється 4: запит завершено і відповідь готова status – основні значення: 200: "OK" 403: "Forbidden" 404: "Page not found" statusText – повертає status-text (наприклад, "OK" або "Not Found")
  • 13. Функція onreadystatechange викликається кожного разу, коли змінюється readyState. Коли readyState стає рівним 4, а status – 200, відгук готовий: <button type="button" onclick="loadDoc()">Click</button> function loadDoc() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "info.txt", true); xhttp.send(); }
  • 14. Задача 83.0 Створіть файл anekdot.txt, в який помістіть 5-7 анекдотів, розділивши їх символами “*****”. Збережіть у кодуванні utf-8. Створіть html-сторінку з кнопкою “Читати анекдот” і DIV’ом. Натискання на кнопку повинно завантажувати у DIV вміст файлу anekdot.txt. Подбайте про естетику.
  • 15. Розв’язок <button type="button" onclick="loadDoc()">Читати анекдот</button> <div id="demo"></div> <script> function loadDoc() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { demo.innerHTML = this.responseText; } }; xhttp.open("POST", "data/anekdot.txt", true); xhttp.send(); } </script>
  • 16. Задача 83.1 Змініть код так, щоб у DIV виводився тільки один з цих анекдотів, по порядку, щоразу новий.
  • 17. Розв’язок <script> var counter = 0; function loadDoc() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var allText = this.responseText; var arr = allText.split('*****'); demo.innerHTML = arr[counter%arr.length]; counter++; } }; xhttp.open("POST", "data/anekdot.txt", true); xhttp.send(); } </script>
  • 18. Задача 83.2 Домашнє завдання: Передбачте дві кнопки, які дозволять “гортати” анекдоти в прямому і зворотному напрямках.
  • 19. Callback Function Callback-функція – це функція, яка передається як параметр іншій функції. Якщо ви на сайті маєте більше ніж одне AJAX-завдання, треба створити одну функцію для виконання об’єкту XMLHttpRequest і по одній функції для кожного AJAX- завдання. Виклик функції повинен містити URL і ім’я функції, яка має викликатись, коли відповідь з сервера готова. Приклад (HTML-частина сторінки): <button type="button" onclick="loadDoc('data/demo1.txt', myFunction)">Запит1</button> <button type="button" onclick="loadDoc('data/demo2.txt', myFunction)">Запит2</button> <p id="demo"></p>
  • 20. JavaScript-частина: <script> function loadDoc(url, cFunction) { var xhttp; xhttp=new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { cFunction(this); } }; xhttp.open("GET", url, true); xhttp.send(); } function myFunction(xhttp) { demo.innerHTML = xhttp.responseText; } </script>
  • 21. Властивості Server Response responseText – отримує дані як рядок responseXML – отримує дані у XML-форматі Приклади: demo.innerHTML = xhttp.responseText; // див. попередні приклади xmlDoc = xhttp.responseXML; Об’єкт XML HttpRequest містить вбудований XML-парсер. Властивість responseXML повертає з сервера відповідь у вигляді XML DOM об’єкта.
  • 22. Приклад: <p id="demo"></p> <script> var xhttp, xmlDoc, txt, x, i; xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { xmlDoc = this.responseXML; txt = ""; x = xmlDoc.getElementsByTagName("AUTHOR"); for (i = 0; i < x.length; i++) { txt = txt + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("demo").innerHTML = txt; } }; xhttp.open("GET", "data/books2.xml", true); xhttp.send(); </script>
  • 23. Приклад 2. HTML-частина: <button type="button" id="btn_autor" onclick="loadXML(event)">Автори</button> <button type="button" id="btn_title" onclick="loadXML(event)">Книжки</button> <p id="demo"></p>
  • 24. Приклад 2. JavaScript-частина: <script> function loadXML(event) { var xhttp, xmlDoc, txt, x, i, tagName; if (event.target.id == "btn_autor") tagName = "AUTHOR"; if (event.target.id == "btn_title") tagName = "TITLE"; xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { xmlDoc = this.responseXML; txt = ""; x = xmlDoc.getElementsByTagName(tagName); for (i = 0; i < x.length; i++) { txt = txt + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("demo").innerHTML = txt; } }; xhttp.open("GET", "data/books2.xml", true); xhttp.send(); } </script>
  • 25. Приклад 3. Навігація по книжках <div id='showBook'></div><br> <input type="button" onclick="previous()" value="<<"> <input type="button" onclick="next()" value=">>"> <script> var i = 0; displayBook(i); function next() { if (i < x.length-1) { i++; displayBook(i); } } function previous() { if (i > 0) { i--; displayBook(i); } } // див наступну сторінку
  • 26. Приклад 3 (продовження) function displayBook(i) { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction(this, i); } }; xmlhttp.open("GET", "data/books2.xml", true); xmlhttp.send(); } function myFunction(xml, i) { var xmlDoc = xml.responseXML; x = xmlDoc.getElementsByTagName("BOOK"); showBook.innerHTML = "Автор: " + x[i].getElementsByTagName("AUTHOR")[0].childNodes[0].nodeValue + "<br>Назва: " + x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue + "<br>Сторінок: " + x[i].getElementsByTagName("PAGES")[0].childNodes[0].nodeValue; } </script>
  • 27. Задача 84 • Завантажте файл goo.gl/KQwAqs • Виправте помилки, щоб зробити додаток працездатним. • Додайте у XML-файл дані про рік видання книги (придумайте самі). • Внесіть зміни у HTML-файл, щоб додана інформація відображалась