SlideShare a Scribd company logo
JavaScript
Дмитрий Смаль
Синтаксис
JavaScript
●
Скриптовый
●
Динамически типизированный
●
Прототипный
●
Поддержка функционального
программирования
●
Функции – объекты первого рода
●
Диалект ECMAScript
●
Другие диалекты (JScript, ActionScript)
Основы синтаксиса
var _true = true; // O, Realy ?
if (a < b) return 1
for (i = 0; i < arr.length; i++) {
arr[i] += 1;
}
try {
throw 'test';
}
catch (e) {
console.log(e)
}
Объявления переменных
var a = 10, b = 20;
window.x = 30;
Типы переменных:
a = 1; b = 1.1; // Number – числовой
str = 'hello' // String – строковы
b = true; // Boolean – логический
obj = {}; arr = []; // Object – объекты
f = function () {
return 1
} // функции – объекты
null и undefined – специальные значения,
отдельные типы
JSON
[] - массив,
{} - объект, словарь, хэш
var rata = {
'result': true,
'message': 'hello world',
'ids': [1, 2, 33, 100500],
'actors' : [
{ 'name' : 'Peter', 'age' : 30 },
{ 'name' : 'David', 'age' : 35 }
]
};
Функции
function doSomething(a, b, c) {
. . .
}
var doSomething = function(a, b, c) {
. . .
}
function addHandler(obj, msg) {
function say() {
alert(msg)
}
obj.addEventListener('click', say);
}
Область видимости
// quiz 1
function doSomething(a, b, c) {
if (!x) {
var x = 5;
}
alert(x);
}
// quiz 2
funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() { alert(i) };
}
funcs[3]();
Замыкания
function hideButNotNow(id, timeout) {
var elem = document.getElementById(id);
setTimeout(function() {
elem.style['display'] = 'none';
}, timeout);
}
hideButNotNow('mybtn', 1000)
hideButNotNow('mybtn2', 2000)
hideButNotNow('mybtn3', 3000)
Замыкание = функция + ее лексическое окружение на
момент создания
Стандартные объекты
Math – станадртные математические операции,
специальные типы Infinity и NaN
String – работа со строками, поиск, доступ по индексу,
строки – immutable
RegExp – работа с регулярными выражениями,
search/match/replace, RegExp.$1
Date – работа с датой и временем, UTC, таймзоны, простая
арифметика
Function – гибкие возможности по вызову функций
!! Глобальный объект !!
Client-Side JS
Где может находиться ?
<script src=”/js/jquery.js”></script>
<script type=”text/script”>
alert('hello there!');
</script>
<a href=”javascript:alert(1)”>CLICK</a>
<a href=”#” onclick=”alert(1)”>PUSH</a>
<div onmouseover=”$(this).fadeOut()”>...
<form onsubmit=”return validate(this)”>...
Порядок выполнения
1) Исполняется сразу при загрузке страницы, в порядке
подключения
2) JS код добавляет обработчики событий
3) … либо устанавливает таймеры
4) Обработчики событий вызываются асинхронно
Простейшие функции
document.write('Hello'); // вывод HTML
alert('Ooops'); // Сообщение об.. успехе
if (сonfirm('Точно уверен?')) // Подтверждение
<a href=”/delete?id=3”
onclick=”confirm('Точно удалить?')”>DEL</a>
prompr('Введите что-то'); // запрос данных
el = document.getElementById('content');
el.innerHTML = '<div>Hello</div>';
API браузера
window – текущее окно (глобальный объект)
document – представляет текущий документ, используется для работы
со структурой HTML
location – текущий URL страницы, позволяет работать с отдельными
частями URL, изменение location – переход по URL
history – объект для работы с историей страниц, позволяет переходить
назад и вперед
navigator – содержит информацию о браузере и операционной
системе
cookie – получение и установка куки
screen – информация о размерах экрана
Не зависящий от языка и платформы интерфейс для доступа
к содержимому XML, HTML и XHTML
DOM
DOM0 (традиционный)
document.forms[0].elements[0]
document.formName.inputName
document.anchors // массив якорей
document.images // массив картинок
document.all // только в IE
onclick=”...” // обработчики событий
onsubmit=”...”
DOM1
DOM1
DOM1
Node – базовый класс: type, appendChild, removeChild,
insertBefore, insertAfter, parentNode, firstChild, childNodes,
nextSibling, previousSibling
Document – главный, корневой Node: createElement,
createTextNode, createAttribute, getElementsByTagName,
getElementById(*), getElementsByName(*)
Element – Node, являющийся тэгом: getAttribute, setAttribute,
removeAttribute, getElementsByTagName
Attr – Node, являющийся аттрибутом: name, value
Text – Node, являющиеся фрагментом текста
Как использовать DOM
table = document.getElementById('tab1');
tb = table.getElementsByTagName('tbody')[0];
row = tb.lastChild;
newRow = row.cloneNode();
tb.appendChild(newRow);
tds = newRow.getElementsByTagName('td');
for (var i = 0; i < tds.length; i++) {
children = td[i].childNodes;
for (var j = 0; j < children.length; j++) {
td[i].removeChild(children[j]);
}
}
События
Типы событий:
click (mousedown, mouseup)
keypress (keydown, keyup)
mouseover (mousein, mouseout)
change, submit
Аттрибуты событий:
Тип
Элемент
Доп. информация (время, координаты, кнопка)
Всплывание (bubbling)
Действия по-умолчанию: a – переход по ссылке, form – отправка
формы и т.д.
<html>
<p>
Hello world
<a href=”#”>
CLCK
</a>
</p>
</html>
Обработчики событий
<a href=”#”
onclick=”alert(1); return false”>CLCK</a>
<script>
a = document.getElementById('the_a');
a.addEventListener('click', function(ev) {
alert('clicked on ' + ev.target);
alert('now on ' + this);
alert('x ' + ev.clientX);
alert('y ' + ev.clientY);
ev.stopPropagation(); // не всплывать!
ev.preventDefault(); // без умолчания!
});
</script>
Asynchronous Javascript And XML
AJAX
AJAX
Обычный HTTP запрос
Асинхронный запрос
Преимущества AJAX
●
Не блокирует интерфейс
●
Сокращает время загрузки страницы
●
Уменьшает сетевой трафик
●
Уменьшает нагрузку на сервер
XHR – пример использования
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', '/xhr/test.html', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
alert(xmlhttp.responseText);
} else {
alert('error' + xmlhttp.status);
}
}
};
xmlhttp.send(null);
“Запрос”
<script src=”/load.js?id=3&callback=func”>
</script>
“Ответ”
func({ 'res' : 'ok', . . . });
Ограничения AJAX
●
Невозможно загружать файлы
(решение: iframe)
●
Работает только в своем домене
(решение: JSONP)
obj.addEventListener('click', function(ev) {
. . .
}); // FF, Chrome, Opera
abj.attachEvent('onclick', function() {
var ev = window.event;
}); // IE
xhr = new XMLHttpRequest(); // FF
xhr = ActiveXObject("Msxml2.XMLHTTP"); // IE
(Не)переносимость JavaScript
JavaScript библиотеки
jQuery
jQuery, $ - точка входа
$(document), $(this), $('a.btn'), $($('div'))
$('div') – nodeset, “унаследован” от массива
$('div').filter(':even').addClass('blue')
.addpend('body').fadeOut('slow');
$(document.window).width()
$('#mylink').attr('href')
jQuery - основы
Стандартные:
.clazz #id div > + ,
Расширенные:
input:radio // “сокращения”
input:checked // только отмеченные checkbox
span:visible // только видимые span
li:nth(n) // n-ый в выборе
li:nth-child(n) // n-ый потомок
p:eq(n) // n+1 ый параграф
p:gt(n) // параграфы, начиная с n+1 ого
p:not(.special) // параграфы без класса special
p:has(a.mylink) // только содержащие a.mylink
jQuery - селекторы
$(...).find('input[name=age]') // поиск вниз
$(...).children('.nice') // потомки
$(...).parent() // родитель
$(...).closest('.containter') // поиск вверх
$(...).siblings() // “соседи”
$(...).next() $(...).nextAll()
$(...).prev() $(...).prevAll()
$(...).filter(':checked') // фильтрация
$(...).each(function(id) { // итерация
alert(this)
})
jQuery - traversing
$(...).appendTo('.another')
$(...).insertBefore('.smth')
$(...).remove()
$(...).clone()
$(...).replaceWith()
$(...).wrap()
$(...).html('<h1>hello</h1>')
$(...).text('plain text')
$(...).attr('href') $(...).attr('href', x)
$(...).addClass('some')
$(...).removeClass('some')
jQuery – работа с DOM
AddClass / removeClass / hasClass / toggleClass
$(...).height() // высота
$(...).width() // ширина
$(...).position() // смещение от родителя
$(...).offset() // абсолютное смещение
{'left':10, 'top':20}
$(...).css('float')
$(...).css('float', 'left')
$(...).css({ left: 10, top: 20 })
Анимация и работа с CSS
$.ajax({
url: '/vote.php',
data: { id: 33, action: 'like' },
success: function (data, status) {
alert('ok: ' + data);
},
error: function (xhr, status) {
alert('fail: ' + status);
}
});
$('#some_div').load('/list.php', { id: 33 });
jQuery AJAX
<a id=”myid” data-mydata=”yep”>CLCK</a>
$('#myid').data('mydata');
$('#myid').data('flag', 'on');
$('a.delete').live(function() {
var $e = $(this);
$.post('/delete/', { id : $e.data('id') });
$e.remove();
});
$(function() { alert('page loaded') });
Полезные мелочи
Плагины jQuery
jquery.modal // диалоговые окна
jquery.validate // валидация данных
jquery.accordion
jquery.slider
jquery.suggest // тысячи их!
jQuery UI
Best Practice
●
Без глобальных переменных!
●
Используйте data- атрибуты для обмена данными
●
Используйте отдельные имена классов
js-login-block, js-login-block-btn
b_login_overlay, b_login_overlay__btn__inner
(function() {
// do some work
})();
JavaScript и конкуренты
Домашнее задание
●
Изучить Class-Based Views и Django Templates
●
Сделать шаблон для отображения списка объектов в
таблице (“Лекции”)
●
Сделать шаблон для отображения одного объекта в
таблице
●
Использовать наследование шаблонов, для исключения
дублирования кода
Спасибо за внимание
Дмитрий Смаль, smal@corp.mail.ru

More Related Content

PPT
Javascript
PPT
Подробная презентация JavaScript 6 в 1
PPTX
I tmozg js_school
PPTX
PPT
Подробная презентация JavaScript 6 в 1
PDF
AddConf. Дмитрий Сошников - Будущее ECMAScript
PPT
Web весна 2012 лекция 9
PDF
Алексей Бережной — «jQuery»
Javascript
Подробная презентация JavaScript 6 в 1
I tmozg js_school
Подробная презентация JavaScript 6 в 1
AddConf. Дмитрий Сошников - Будущее ECMAScript
Web весна 2012 лекция 9
Алексей Бережной — «jQuery»

What's hot (20)

PPT
Web весна 2013 лекция 9
PPTX
C#. От основ к эффективному коду
PDF
Decorators' recipes
PPTX
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PDF
Очередной скучный доклад про логгирование
PPT
Javascript
PPTX
Максим Щепелин. "Unittesting. Как?"
PPT
Толстая модель. История разработки ORM
PPT
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
PDF
Лекция #5. Введение в язык программирования Python 3
PDF
Web internship java script
PDF
Влад Ковташ — Yap Database
PPT
Talks on collections
PPT
Декораторы в Python и их практическое использование
PPT
Yii development
PPT
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
PDF
Объектное и прототипное программирование в Javascript
PDF
Perl: Symbol table
PPTX
Javascript 1
Web весна 2013 лекция 9
C#. От основ к эффективному коду
Decorators' recipes
Фундаментальные основы разработки под iOS. Павел Тайкало
Очередной скучный доклад про логгирование
Javascript
Максим Щепелин. "Unittesting. Как?"
Толстая модель. История разработки ORM
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
Лекция #5. Введение в язык программирования Python 3
Web internship java script
Влад Ковташ — Yap Database
Talks on collections
Декораторы в Python и их практическое использование
Yii development
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
Объектное и прототипное программирование в Javascript
Perl: Symbol table
Javascript 1
Ad

Viewers also liked (19)

PPT
Web осень 2012 лекция 5
PPT
Web весна 2012 лекция 3
PPTX
АиСД осень 2012 лекция 8
PDF
Бизнес и системный анализ весна 2013 лекция 2
PDF
Тестирование весна 2013 лекция 4
PPTX
Информационная безопасность весна 2013 лекция 4
PPTX
СУБД осень 2012 лекция 5
PPT
Web осень 2012 лекция 10
PPTX
Управление продуктом весна 2014 лекция 1
PPT
Web весна 2012 лекция 10
PDF
C++ осень 2012 лекция 6
PPTX
C++ осень 2012 лекция 11
PPT
Web осень 2012 лекция 2
PPTX
Java весна 2013 лекция 9
PPTX
СУБД осень 2012 вестник 2
PPTX
АиСД осень 2012 лекция 3
PPTX
Java осень 2012 лекция 7
PDF
Безопасность интернет-приложений осень 2013 лекция 1
PPTX
Java весна 2013 лекция 1
Web осень 2012 лекция 5
Web весна 2012 лекция 3
АиСД осень 2012 лекция 8
Бизнес и системный анализ весна 2013 лекция 2
Тестирование весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4
СУБД осень 2012 лекция 5
Web осень 2012 лекция 10
Управление продуктом весна 2014 лекция 1
Web весна 2012 лекция 10
C++ осень 2012 лекция 6
C++ осень 2012 лекция 11
Web осень 2012 лекция 2
Java весна 2013 лекция 9
СУБД осень 2012 вестник 2
АиСД осень 2012 лекция 3
Java осень 2012 лекция 7
Безопасность интернет-приложений осень 2013 лекция 1
Java весна 2013 лекция 1
Ad

Similar to Web осень 2012 лекция 9 (20)

PDF
Scala
PDF
Асинхронный JavaScript
PDF
Scala and LiftWeb presentation (Russian)
PPTX
C# Deep Dive
PPTX
C sharp deep dive
PPTX
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
PDF
Scala on android
PDF
8 встреча — Язык программирования Python (В. Ананьев)
ODP
Charming python sc2-8
PPTX
20100425 model based_testing_kuliamin_lectures01-03
PDF
Scala for android
PPTX
Bytecode
PPT
jQuery: быстрая разработка веб-интерфейсов на JavaScript
PPTX
Зачем нужна Scala?
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PDF
Pyton – пробуем функциональный стиль
PPTX
Язык программирования C#
PPTX
course js day 2
PPTX
Deep Dive C# by Sergey Teplyakov
Scala
Асинхронный JavaScript
Scala and LiftWeb presentation (Russian)
C# Deep Dive
C sharp deep dive
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Scala on android
8 встреча — Язык программирования Python (В. Ананьев)
Charming python sc2-8
20100425 model based_testing_kuliamin_lectures01-03
Scala for android
Bytecode
jQuery: быстрая разработка веб-интерфейсов на JavaScript
Зачем нужна Scala?
DevConf. Дмитрий Сошников - ECMAScript 6
Pyton – пробуем функциональный стиль
Язык программирования C#
course js day 2
Deep Dive C# by Sergey Teplyakov

More from Technopark (20)

PDF
Лекция 11. Вычислительная модель Pregel
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
PDF
Лекция 13. YARN
PDF
Лекция 12. Spark
PDF
Лекция 10. Apache Mahout
PDF
Лекция 9. ZooKeeper
PDF
Лекция 7. Введение в Pig и Hive
PDF
Лекция 6. MapReduce в Hadoop (графы)
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
PDF
Лекция 4. MapReduce в Hadoop (введение)
PDF
Лекция 3. Распределённая файловая система HDFS
PDF
Лекция 2. Основы Hadoop
PDF
Лекция 1. Введение в Big Data и MapReduce
PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
PPT
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Лекция 11. Вычислительная модель Pregel
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 13. YARN
Лекция 12. Spark
Лекция 10. Apache Mahout
Лекция 9. ZooKeeper
Лекция 7. Введение в Pig и Hive
Лекция 6. MapReduce в Hadoop (графы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 4. MapReduce в Hadoop (введение)
Лекция 3. Распределённая файловая система HDFS
Лекция 2. Основы Hadoop
Лекция 1. Введение в Big Data и MapReduce
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...

Web осень 2012 лекция 9

  • 4. Основы синтаксиса var _true = true; // O, Realy ? if (a < b) return 1 for (i = 0; i < arr.length; i++) { arr[i] += 1; } try { throw 'test'; } catch (e) { console.log(e) }
  • 5. Объявления переменных var a = 10, b = 20; window.x = 30; Типы переменных: a = 1; b = 1.1; // Number – числовой str = 'hello' // String – строковы b = true; // Boolean – логический obj = {}; arr = []; // Object – объекты f = function () { return 1 } // функции – объекты null и undefined – специальные значения, отдельные типы
  • 6. JSON [] - массив, {} - объект, словарь, хэш var rata = { 'result': true, 'message': 'hello world', 'ids': [1, 2, 33, 100500], 'actors' : [ { 'name' : 'Peter', 'age' : 30 }, { 'name' : 'David', 'age' : 35 } ] };
  • 7. Функции function doSomething(a, b, c) { . . . } var doSomething = function(a, b, c) { . . . } function addHandler(obj, msg) { function say() { alert(msg) } obj.addEventListener('click', say); }
  • 8. Область видимости // quiz 1 function doSomething(a, b, c) { if (!x) { var x = 5; } alert(x); } // quiz 2 funcs = []; for (var i = 0; i < 10; i++) { funcs[i] = function() { alert(i) }; } funcs[3]();
  • 9. Замыкания function hideButNotNow(id, timeout) { var elem = document.getElementById(id); setTimeout(function() { elem.style['display'] = 'none'; }, timeout); } hideButNotNow('mybtn', 1000) hideButNotNow('mybtn2', 2000) hideButNotNow('mybtn3', 3000) Замыкание = функция + ее лексическое окружение на момент создания
  • 10. Стандартные объекты Math – станадртные математические операции, специальные типы Infinity и NaN String – работа со строками, поиск, доступ по индексу, строки – immutable RegExp – работа с регулярными выражениями, search/match/replace, RegExp.$1 Date – работа с датой и временем, UTC, таймзоны, простая арифметика Function – гибкие возможности по вызову функций !! Глобальный объект !!
  • 12. Где может находиться ? <script src=”/js/jquery.js”></script> <script type=”text/script”> alert('hello there!'); </script> <a href=”javascript:alert(1)”>CLICK</a> <a href=”#” onclick=”alert(1)”>PUSH</a> <div onmouseover=”$(this).fadeOut()”>... <form onsubmit=”return validate(this)”>...
  • 13. Порядок выполнения 1) Исполняется сразу при загрузке страницы, в порядке подключения 2) JS код добавляет обработчики событий 3) … либо устанавливает таймеры 4) Обработчики событий вызываются асинхронно
  • 14. Простейшие функции document.write('Hello'); // вывод HTML alert('Ooops'); // Сообщение об.. успехе if (сonfirm('Точно уверен?')) // Подтверждение <a href=”/delete?id=3” onclick=”confirm('Точно удалить?')”>DEL</a> prompr('Введите что-то'); // запрос данных el = document.getElementById('content'); el.innerHTML = '<div>Hello</div>';
  • 15. API браузера window – текущее окно (глобальный объект) document – представляет текущий документ, используется для работы со структурой HTML location – текущий URL страницы, позволяет работать с отдельными частями URL, изменение location – переход по URL history – объект для работы с историей страниц, позволяет переходить назад и вперед navigator – содержит информацию о браузере и операционной системе cookie – получение и установка куки screen – информация о размерах экрана
  • 16. Не зависящий от языка и платформы интерфейс для доступа к содержимому XML, HTML и XHTML DOM
  • 17. DOM0 (традиционный) document.forms[0].elements[0] document.formName.inputName document.anchors // массив якорей document.images // массив картинок document.all // только в IE onclick=”...” // обработчики событий onsubmit=”...”
  • 18. DOM1
  • 19. DOM1
  • 20. DOM1 Node – базовый класс: type, appendChild, removeChild, insertBefore, insertAfter, parentNode, firstChild, childNodes, nextSibling, previousSibling Document – главный, корневой Node: createElement, createTextNode, createAttribute, getElementsByTagName, getElementById(*), getElementsByName(*) Element – Node, являющийся тэгом: getAttribute, setAttribute, removeAttribute, getElementsByTagName Attr – Node, являющийся аттрибутом: name, value Text – Node, являющиеся фрагментом текста
  • 21. Как использовать DOM table = document.getElementById('tab1'); tb = table.getElementsByTagName('tbody')[0]; row = tb.lastChild; newRow = row.cloneNode(); tb.appendChild(newRow); tds = newRow.getElementsByTagName('td'); for (var i = 0; i < tds.length; i++) { children = td[i].childNodes; for (var j = 0; j < children.length; j++) { td[i].removeChild(children[j]); } }
  • 22. События Типы событий: click (mousedown, mouseup) keypress (keydown, keyup) mouseover (mousein, mouseout) change, submit Аттрибуты событий: Тип Элемент Доп. информация (время, координаты, кнопка)
  • 23. Всплывание (bubbling) Действия по-умолчанию: a – переход по ссылке, form – отправка формы и т.д. <html> <p> Hello world <a href=”#”> CLCK </a> </p> </html>
  • 24. Обработчики событий <a href=”#” onclick=”alert(1); return false”>CLCK</a> <script> a = document.getElementById('the_a'); a.addEventListener('click', function(ev) { alert('clicked on ' + ev.target); alert('now on ' + this); alert('x ' + ev.clientX); alert('y ' + ev.clientY); ev.stopPropagation(); // не всплывать! ev.preventDefault(); // без умолчания! }); </script>
  • 26. AJAX
  • 29. Преимущества AJAX ● Не блокирует интерфейс ● Сокращает время загрузки страницы ● Уменьшает сетевой трафик ● Уменьшает нагрузку на сервер
  • 30. XHR – пример использования var xmlhttp = getXmlHttp() xmlhttp.open('GET', '/xhr/test.html', true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { alert(xmlhttp.responseText); } else { alert('error' + xmlhttp.status); } } }; xmlhttp.send(null);
  • 31. “Запрос” <script src=”/load.js?id=3&callback=func”> </script> “Ответ” func({ 'res' : 'ok', . . . }); Ограничения AJAX ● Невозможно загружать файлы (решение: iframe) ● Работает только в своем домене (решение: JSONP)
  • 32. obj.addEventListener('click', function(ev) { . . . }); // FF, Chrome, Opera abj.attachEvent('onclick', function() { var ev = window.event; }); // IE xhr = new XMLHttpRequest(); // FF xhr = ActiveXObject("Msxml2.XMLHTTP"); // IE (Не)переносимость JavaScript
  • 35. jQuery, $ - точка входа $(document), $(this), $('a.btn'), $($('div')) $('div') – nodeset, “унаследован” от массива $('div').filter(':even').addClass('blue') .addpend('body').fadeOut('slow'); $(document.window).width() $('#mylink').attr('href') jQuery - основы
  • 36. Стандартные: .clazz #id div > + , Расширенные: input:radio // “сокращения” input:checked // только отмеченные checkbox span:visible // только видимые span li:nth(n) // n-ый в выборе li:nth-child(n) // n-ый потомок p:eq(n) // n+1 ый параграф p:gt(n) // параграфы, начиная с n+1 ого p:not(.special) // параграфы без класса special p:has(a.mylink) // только содержащие a.mylink jQuery - селекторы
  • 37. $(...).find('input[name=age]') // поиск вниз $(...).children('.nice') // потомки $(...).parent() // родитель $(...).closest('.containter') // поиск вверх $(...).siblings() // “соседи” $(...).next() $(...).nextAll() $(...).prev() $(...).prevAll() $(...).filter(':checked') // фильтрация $(...).each(function(id) { // итерация alert(this) }) jQuery - traversing
  • 39. AddClass / removeClass / hasClass / toggleClass $(...).height() // высота $(...).width() // ширина $(...).position() // смещение от родителя $(...).offset() // абсолютное смещение {'left':10, 'top':20} $(...).css('float') $(...).css('float', 'left') $(...).css({ left: 10, top: 20 }) Анимация и работа с CSS
  • 40. $.ajax({ url: '/vote.php', data: { id: 33, action: 'like' }, success: function (data, status) { alert('ok: ' + data); }, error: function (xhr, status) { alert('fail: ' + status); } }); $('#some_div').load('/list.php', { id: 33 }); jQuery AJAX
  • 41. <a id=”myid” data-mydata=”yep”>CLCK</a> $('#myid').data('mydata'); $('#myid').data('flag', 'on'); $('a.delete').live(function() { var $e = $(this); $.post('/delete/', { id : $e.data('id') }); $e.remove(); }); $(function() { alert('page loaded') }); Полезные мелочи
  • 42. Плагины jQuery jquery.modal // диалоговые окна jquery.validate // валидация данных jquery.accordion jquery.slider jquery.suggest // тысячи их!
  • 44. Best Practice ● Без глобальных переменных! ● Используйте data- атрибуты для обмена данными ● Используйте отдельные имена классов js-login-block, js-login-block-btn b_login_overlay, b_login_overlay__btn__inner (function() { // do some work })();
  • 46. Домашнее задание ● Изучить Class-Based Views и Django Templates ● Сделать шаблон для отображения списка объектов в таблице (“Лекции”) ● Сделать шаблон для отображения одного объекта в таблице ● Использовать наследование шаблонов, для исключения дублирования кода