Web-технологи Лекция7

advertisement
• AJAX, Asynchronous Javascript And Xml - технология
для взаимодействия с сервером без перезагрузки
страниц.
• (X)HTML, CSS для подачи и стилизации
информации
• DOM-модель, операции над которой
производятся javascript на стороне клиента
• XMLHttpRequest для асинхронного обмена
данными с веб-сервером. В некоторых ситуациях
используется IFrame, SCRIPT-тег или другой
аналогичный транспорт.
• JSON часто используется для обмена данными,
однако любой формат подойдет
• Сложность в реализации
– Недостаточные возможности браузера
(javascript)
– Асинхронная модель сложнее для отладки
– Неопределена последовательность
выполнения
– Можно делать много одновременных задач
("удочек"), но задача, начатая первой, может
окончиться последней.
• Реакция тут же, но неизвестно, какой будет
результат. Усложнена обработка ошибок
• Контроль целостности (bugproof)
(отправили запрос на удаление)
• Интерактивность
• Быстрый интерфейс
• Модель - Содержит внутреннее представление
данных в браузере.
• Представление (Вид) - Отображение на экран
происходит при помощи DOM.
• Контроллер - Код, который связывает модель с
представлением и обрабатывает события.
Методы объекта XMLHttpRequest
• abort() - отмена текущего запроса к серверу.
• getAllResponseHeaders() - получить все заголовки
• getResponseHeader("имя_заголовка")
• open("тип_запроса","URL","асинхронный","имя_п
ользователя","пароль")
• send("содержимое") - послать HTTP запрос
• setRequestHeader("имя_заголовка","значение") установить значения заголовка запроса.
Свойства объекта XMLHttpRequest
• onreadystatechange - задаёт обработчик, который
вызывается всякий раз при смене статуса объекта.
• readyState - число, обозначающее статус объекта.
• responseText - представление ответа сервера в
виде обычного текста (строки).
• responseXML - объект документа, совместимый с
DOM, полученного от сервера.
• status - состояние ответа от сервера.
• statusText - текстовое представление состояния
ответа от сервера.
readyState:
• 0 - Объект не инициализирован.
• 1 - Объект загружает данные.
• 2 - Объект загрузил свои данные.
• 3 - Объект не полностью загружен, но может
взаимодействовать с пользователем.
• 4 - Объект полностью инициализирован; получен
ответ от сервера.
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();
}
var req = getXmlHttp()
var statusElem = document.getElementById('vote_status')
req.onreadystatechange = function() {
if (req.readyState == 4) {
statusElem.innerHTML = req.statusText
if(req.status == 200) {
alert("Ответ сервера: "+req.responseText);
}
}
}
req.open('GET', ‘путь_до_скрипта', true);
req.send(null);
statusElem.innerHTML = ‘…‘
• .setRequestHeader("Content-Type", "application/xwww-form-urlencoded");
function attachScript(id, src){
var element = dojo.doc.createElement("script")
element.type = "text/javascript"
element.src = src
element.id = id
document.getElementsByTagName("head")[0].appendChild(ele
ment)
}
Только GET, при каждом запросе создается таймер. (10 сек)
• Изменения в history браузера, влияющие на историю
посещенных страниц и/или кнопки back-forward.
// получить окно по тегу
function getIframeDocument(iframeNode) {
if (iframeNode.contentDocument) return
iframeNode.contentDocument
if (iframeNode.contentWindow) return
iframeNode.contentWindow.document
return iframeNode.document
}
• GET-запрос
function setIframeSrc(iframeNode, src) {
getIframeDocument(iframeNode).location.replace(src)
}
• POST-запрос
form.target='имя ифрейма' и вызвать form.submit()
• Объект — это неупорядоченное множество пар
имя/значение, заключённое в фигурные скобки { }. Между
именем и значением стоит символ «:», а пары
имя/значение разделяются запятыми.
• Массив (одномерный) — это множество значений,
имеющих порядковые номера (индексы). Массив
заключается в квадратные скобки [ ].
• Значение может быть строкой в двойных кавычках, или
числом, или true, или false, или null, или объектом, или
массивом.
• Строка — это упорядоченное множество из нуля или
более символов юникода, заключенное в двойные
кавычки
{
"firstName": "Иван",
"lastName": "Иванов",
"address": {
"streetAddress": "Московское ш., 101, кв.101",
"city": "Ленинград", "postalCode": 101101
},
"phoneNumbers": [ "812 123-1234", "916 123-4567" ]
}
Download