Ajax и будущее Java Script

39
AJAX и будущее JavaScript Константин Кичинский [email protected] http://zelo-stroi.livejournal.com

description

Ajax и будущее Java Script, Константин Кичинский, Клуб MAInfo.ru

Transcript of Ajax и будущее Java Script

Page 1: Ajax и будущее Java Script

AJAX и будущее JavaScript

Константин Кичинский[email protected]

http://zelo-stroi.livejournal.com

Page 2: Ajax и будущее Java Script

JavaScript

Page 3: Ajax и будущее Java Script
Page 4: Ajax и будущее Java Script
Page 5: Ajax и будущее Java Script
Page 6: Ajax и будущее Java Script

AJAX | Asynchronous JavaScript and XML

Page 7: Ajax и будущее Java Script

Ajax

• XMLHttpRequest + XML

Page 8: Ajax и будущее Java Script

Ajax

• XMLHttpRequest — API, предоставляемое браузером и доступное через JavaScript, позволяющее передавать XML и другие текстовые данные между клиентом и сервером посредством протокола HTTPпутем установления независимых и асинхронных соединений между веб-страницей на клиенте и веб-сервером.

Page 9: Ajax и будущее Java Script

function ajax(url, vars, callbackFunction){

var request = window.XMLHttpRequest ? new XMLHttpRequest() : newActiveXObject("MSXML2.XMLHTTP.3.0");

request.open("POST", url, true);request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

request.onreadystatechange = function(){

if (request.readyState == 4 && request.status == 200) {

if (request.responseText){

callbackFunction(request.responseText);

}}

}request.send(vars);

}

Page 10: Ajax и будущее Java Script

if( !window.XMLHttpRequest ) XMLHttpRequest = function(){

try{

return new ActiveXObject("MSXML3.XMLHTTP")

} catch(e){}

try{

return new ActiveXObject("MSXML2.XMLHTTP.3.0")

}catch(e){}

try{

return new ActiveXObject("Msxml2.XMLHTTP")

}catch(e){}

try{

return new ActiveXObject("Microsoft.XMLHTTP")

}catch(e){}

throw new Error("Could not find an XMLHttpRequest alternative.")

};

Page 11: Ajax и будущее Java Script
Page 12: Ajax и будущее Java Script

• DOM — Document Object Model, способ представления html- или xml-документа в виде объектной модели, не зависящий от платформы и языка реализации.

• DOM описывает способы навигации по документу и методы доступа к значениям элементов и их атрибутам.

Page 13: Ajax и будущее Java Script

<?xml version=”1.0” ?><files>

<file author='Constantin'><address>http://files.mainfo.ru/infa_labs1.zip</address><description>Задания на лабораторную работу №1 по

информатике</description>

</file>…

<file author='Constantin'><address>http://files.mainfo.ru/infa_labs10.zip</address><description>Задания на лабораторную работу №10 по

информатике</description>

</file>

</files>

Page 14: Ajax и будущее Java Script

function parseFilesXMLDocument(filesXMLDoc) {var files =

filesXMLDoc.getElementsByTagName('files').item(0);

for (var iFile = 0; iFile < files.childNodes.length; iFile++) {var file = files.childNodes.item(iFile);

file.author = file.getAttribute('author');

file.address = file.getElementsByTagName(' address').item(0).data;

file.description = file.getElementsByTagName('description').item(0).data;

addFile(file);

}

}

Page 15: Ajax и будущее Java Script

function addFile(file) {

var fileHTML = ''<div class='file'>'' + ''<span class='description'>'' + file. description + ''</span'' + ''<span class='author'>'' + file.author + ''</span>'' + ''<span class='download'>'' + ''<a href=' '' + file.address + '''>скачать</a>'';

}

Page 16: Ajax и будущее Java Script

• JSON — JavaScript Object Notation, простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером, основанный на подмножестве языка JavaScript.

• var jsObject = eval(' (' + jsonString + ') ');

Page 17: Ajax и будущее Java Script

{ files: [{

author: 'Constantin',address: 'http://files.mainfo.ru/infa_labs1.zip',description: 'Задания на лабораторную работу №1 по информатике';

},…{

author: 'Constantin',address: 'http://files.mainfo.ru/infa_labs10.zip',description: 'Задания на лабораторную работу №10 по информатике';

}]

}

Page 18: Ajax и будущее Java Script

function parseFilesJSONDocument(filesJSONDoc) {

var files = filesJSONDoc.parseJSON().files;

for (var iFile = 0; iFile < files.length; iFile++) {

addFile(files[iFile]);

}

}

Page 19: Ajax и будущее Java Script

• E4X — ECMAScript for XML, расширение языков семества ECMASCript (включая JavaScript) для нативной (встроенной) поддержки работы с XML, позволяющей работать с XML документами, учитывая их семантику.

Page 20: Ajax и будущее Java Script

function parseFilesE4XDocument(filesE4XDoc) {for each (var file in filesE4XDoc.files) {

addFile(file);}

}function addFile(file) {var fileHTML = ''<div class='file'>'' + ''<span class='description'>'' +

file.description + ''</span'' + ''<span class='author'>'' + file.@author+ ''</span>'' + ''<span class='download'>'' + ''<a href=' '' + file.address + '''>скачать</a>'';

…}

Page 21: Ajax и будущее Java Script

• EX4 – начиная с JavaScript 1.7

• JSON – скоро непосредственно в JavaScript, сейчас – json.org

Page 22: Ajax и будущее Java Script

Каким он будет?

Page 23: Ajax и будущее Java Script

JavaScript 2 – ECMAScript 4

ООП

• ECMASript4 поддерживает объектно-ориентированное программирование введением таких структур, как классы (class) и интерфейсы (interface) — подобно языку Java.

Page 24: Ajax и будущее Java Script

JavaScript 2 – ECMAScript 4

ООП• class C extends B {

function C(m) { mem = m

}

public function getmem() { return mem

} private var mem : Object

} var c : C = new C(new Date)

Page 25: Ajax и будущее Java Script

JavaScript 2 – ECMAScript 4

ООП

• interface I { function meth(int) : int

}

class B implements I {

public function meth(a : int) : int {

return a * a

}

}

Page 26: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

Пакеты

• Модульность приложения поддерживается пакетами (package) и пространствами имен (namespace).

Page 27: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

namespace improved {class C {

public function frob(): int {...}

public improved function frob(alpha: double): double { ... }

}

}

c.improved::frob(1.2)

use namespace improved . . . c.frob(alpha)

Page 28: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

package org.mozilla.venkman {

class Debugger { . . . }

class Inspector { . . . }

class StackWalker { . . . }

}

import org.mozilla.venkman.

// use Debugger, Inspector, etc. freely

Page 29: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

Строгие типы данных

• Программирование больших проектов упрощается за счет введения строгих типов данных, определяемых классами и интерфейсами.

Page 30: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

Оптимизация времени и пространства

• Строгая типизация облегчает раннее связывание точек вызова и вызываемых из них методов, что потенциально уменьшает стоимость вызова методов по сравнению с ES3.

Page 31: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

Данные

• Параметризованные классы,Array[[T]] для Array типа T

• объекты с геттер и сеттер-методами,

• Типизация функцийfunction f(a : int, b : String, c : Object) : RetType {

// arguments are guaranteed to match types

// return value must convert to or match RetType

}

Page 32: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Структурные типыtype Q = {p: int, q: String}type R = {p: int, q: String, r: Boolean}type A = [int, String, Boolean, Object]

• Функциональный тип данныхtype F = function (int, String, Boolean): Object type G = function (int, Object, Object): Number

Объединенияtype U = (R, A, F)

• function f(a : int, b : String, ...rest) { // rest is of type Array, contains actual trailing arguments

}

Page 33: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Групповые присваивания// swap, rotate, permute in general [a, b] = [b, a] [p, q, r] = [q, r, p]

• // destructure a triple into fresh varsvar [s, v, o] = db.getTriple()

• let {'Title': title, 'Height': height, 'Width': width} = jsonResult

• for (let [key, {'Title':title, 'FileSize':size}] in dict) print(key, title, size)

Page 34: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Итераторы

• let it = Iterator(["meow", "oink", "woof"])

• it.next() returns [0, "meow"]

• it.next() returns [1, "oink"]

• it.next() returns [2, "woof"]

• for (let i in it) print(i)

Page 35: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Генераторы

• function count(n : int) {

for (let i = 0; i < n; i++)

yield i}

• var gen = count(10)

• gen.next() returns 0; . . .; gen.next() returns 9 gen.next() throws StopIteration

Page 36: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Заполнение массивов

• let squares = [i * i for (i in count(10))] print(squares) => "0,1,4,9,...,81«

• let odd_squares = [i * i for (i in count(10)) if (i% 2)]

• return [i * j for (i in it1) for (j in it2) if (i != j)]

Page 37: Ajax и будущее Java Script

JavaScript 2 -- ECMAScript 4

• Операторы

• class Complex {

var real:Number, imag:Number;

public static function +(a:Object, b:Object):Complex {

if (a is Complex && b is Complex)

return new Complex(a.real + b.real, a.imag + b.imag)

if (b == null) return (a is Complex) ? a : new Complex(a) return intrinsic::+(a, b) } . . . }

Page 38: Ajax и будущее Java Script

0.1 + 0.2 === 0.3,

а не 0.30000000000000004

Page 39: Ajax и будущее Java Script

• http://www.ecmascript.org/es4/spec/overview.pdf