E12 "Evil is going on"

Relevanta dokument
E12 "Evil is going on"

E13 "Behind the Wild"

E13 Behind the Wild. Dagens agenda. Cookies Context/ändra context Augmentation (förstärkning) Klassiskt arv Att låna metoder Namespaces Postludium

TDP013. Webbprogrammering och interaktivitet. AJAX, CORS & jquery. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

"HTML5 och relaterade API:er"

E11 "Protection" Föreläsning 11, HT2014 Säkerhet, tillgänglighet. Johan Leitet. Kurs: 1dv403 Webbteknik I

1ME323 Webbteknik 3 Lektion 6 API. Rune Körnefors. Medieteknik Rune Körnefors

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

PHP. Dynamiska webbsidor

JavaScript. En Introduktion

JAVASCRIPT. Beteende

F15 Tillgänglighet/Accessibility Dagens agenda

Ajax TruClient. Erfarenheter, tips och trix från Swedbank IT. Christian Gerdes Performance Engineer, LIGHTS IN LINE AB

JavaScript En Introduktion

Systemutvecklare SU14, Malmö

E03 "Day 3: 2:00 p.m 3:00 p.m"

F8 Webbteknologier 2. PHP PHP: Hypertext Preprocessor

Kursplanering Utveckling av webbapplikationer

Introduk+on +ll programmering i JavaScript

Avancerade Webbteknologier

E07 "Greased Lightning"

Elektronisk publicering TNMK30

F8 Webbteknologier 2. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Statistik från webbplatser

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

TDP013. Innan AJAX Ett synkront webb. Med AJAX Ett Asynkront webb AJAX. Webbprogrammering och interaktivitet. AJAX, CORS,jQuery, PaaS, Projektet

TDP013. Webbprogrammering och interaktivitet. AJAX, CORS,jQuery, PaaS, Projektet. Anders Fröberg Institutionen för Datavetenskap (IDA)

Webbprogrammering TDDD52

Laboration 1 XML, XPath, XSLT och JSON

Projektuppgift- Mashup- Applikation

Webbservrar, severskript & webbproduktion

JAVASCRIPT-POWERED LOADRUNNER CHRISTIAN GERDES PERFORMANCE ENGINEER LIGHTS IN LINE AB

Undervisningen i ämnet webbutveckling ska ge eleverna förutsättningar att utveckla följande:

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

TDP013. Innan AJAX Ett synkront webb. Med AJAX Ett Asynkront webb

EXAMENSARBETE. Asynkron webbkommunkation

Objektorienterad programmering

API:er/Mashup. Föreläsning 4 API:er och Mashups. Johan Leitet johan.leitet@lnu.se twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

WebSocket eller Ajax i Webbapplikationer

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

ASP.NET Thomas Mejtoft

Hur hänger det ihop? För att kunna kommunicera krävs ett protokoll tcp/ip, http, ftp För att veta var man skall skicka

1ME323 Webbteknik 3 Lek0on 6 API. Rune Körnefors. Medieteknik Rune Körnefors rune.kornefors@lnu.se

Modern webbutveckling. av Robert Welin-Berger

Laboration 3 i kursen Produktion för tryckta medier och webb: Webbplatsproduktion med ett publiceringssystem

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

MVC med Javascript och Ajax. Filip Ekberg

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Fönsterhanterare i JavaScript PWD, Personal Web Desktop

Webbplats analys emreemir.com

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

Statistik från webbplatser

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Övning (X)HTML 2. Sidan 1 av

F04 Webbteknik. Föreläsning 4, HT2014 Webbteknik. Johan Leitet

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Distribuerade affärssystem

En snabb titt på XML LEKTION 6

PHP - Fortsättning. PHP och MySQL

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Version Namn Datum Beskrivning 1.0 Förutsättningar Vitec Ekonomi 1.1 Marie Justering för krav på Windows Server

Webbplats analys akcpdistributor.de.ipaddress.com

Webbplats analys akcpsensor.de.ipaddress.com

Viktigt! Glöm inte att skriva tentamenskod på alla blad du lämnar in.

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

OOP Objekt-orienterad programmering

Laboration 4. Laboration 4, Formulärvalidering. Inledning. Observera. Mål. Genomförande

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

PHP. TNMK30 - Elektronisk publicering

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Webbprogrammering. Sahand Sadjadee

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

SKOLFS. beslutade den XXX 2017.

Webbteknik II - 1DV449 Laboration 3

PM 01 En jämförelse av två analysmodeller för val av komponentteknik

! HTML Formulär! JavaScript! Syntax! Events! DOM. ! URL variabler i en query string (get) ! HTTP post request (post)

Webbtjänster med API er

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

Namn: (Ifylles av student) Personnummer: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Användarhandledning Version 1.2

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Webbplats analys cofra.it

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er

NU! NU! Bygg en webbplats NU! Bygg en webbplats. Swedish Language Edition published by Docendo Sverige AB. Bygg en webbplats.

JS & beteende. TNMK30 - Elektronisk publicering

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

Dynamiska webbsystem. Ajax

Programmering B med Visual C

Kopiering av objekt i Java

Transkript:

E12 "Evil is going on" Föreläsning 12, HT2012 AJAX Kurs: 1dv403 Webbteknik I Johan Leitet

E12 Evil is going on Dagens agenda AJAX XMLHttpRequest-objektet JSON

Vad är AJAX? Asynchronous JavaScript and XML 1999: Microsoft bygger en Active X-kontroll (XMLHttpRequest) i Internet Explorer 5. 2000-tal: Mozilla, Safari och Opera bygger in XMLHttpRequest-objektet i sina webbläsare. 2005: Uttrycket AJAX myntas av Jesse James Garrett genom artikeln: Ajax: A New Approach to Web Applications 2006: Microsoft bygger in XMLHttpRequest-objektet på samma sätt som övriga webbläsare.

Vad är AJAX? Vad innehåller AJAX? JavaScript (X)HTML + CSS DOM XMLHttpRequest-objektet XML

Desktopapplikation/webbsida En vanlig applikation: Korta svarstider Mycket feedback vid användning Asynkron kommunikation med servern Uppdateringar av datan syns direkt En klassisk webbapplikation: Medellånga till långa svarstider Lite feedback vid användning Synkron kommunikation med servern Sidan måste laddas om för ny data

Klassiska webbsidor Request - Webbsida Response - Webbsida Request - Webbsida Response - Webbsida Request - Webbsida Response - Webbsida

AJAX Request - Webbsida Response - Webbsida Request - data Response - Data Request - data Response - Data

Synchronous vs. asynchronous

Traditionellt vs. Ajax Data Traditionell Total datamängd Tid Ajax Data Tid Tid 0101011 0101011 0101011 0101011 0101011 0101011 0101011 1001110 1001110 1001110 1001110 1001110 1001110 1001110

Före AJAX 2 JavaScript 4 1 iframe 3 1) Ett javascript på webbsidan kontaktar iframen och talar om vad som ska hämtas. 2) Iframen gör en postback till servern 3) Serven skickar tillbaka data till iframen tillsammans med eventuella javascript. 4) Iframen skickar datan till huvuddokumentet, alt. huvuddokumentet begär datan.

XMLHttpRequest XMLHttpRequest (förkortas framöver XHR) JavaScript XMLHttpRequest

In action... 1 Skapa XMLHttpRequestobject 2 Registrera svarsfunktion.onreadystatechanged 3 Konfigurera.open(...) 4 Klienten kan fortsätta arbeta Skicka.send() Mottagen data presenteras Svarsfunktion Bearbetar... Bearbetar... Klar Förfrågan behandlas på servern med t.ex. PHP, ASP.NET eller liknande

1 Skapa ett XHR-objekt >=7 >=1.0 >=1.2 >=7.60 var xhr = new XMLHttpRequest(); 5 och 6 var xhr = new ActiveXObject( Microsoft.XMLHTTP );

1 Skapa ett XHR-objekt AjaxCon.prototype.getXHR = function { var xhr = null; try { xhr = new XMLHttpRequest(); } catch (error){ try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (error){ throw new Error("No XHR object available"); } } return xhr; }

2 onreadystatechange var xhr = this.getxhr(); xhr.onreadystatechange = function(){ }; if(xhr.readystate === 4){ } if(xhr.status >= 200 && xhr.status < 300 xhr.status === 304){ } else{ } alert(xhr.responsetext); Finns 0-4 men i praktiken enbart 4 som används Här kan vi nu behandla datan som kommit från servern console.log("läsfel, status:"+xhr.status);

3 open var xhr = this.getxhr(); xhr.onreadystatechange = function(){...}; xhr.open("get", thefiletoget.php, true); Koppla alltid onreadystatechanged före open anropas! Synkront anrop: false Asynkront anrop: true

4 send var xhr = this.getxhr(); xhr.onreadystatechange = function(){...}; xhr.open("get", thefiletoget.php, true); xhr.send(null); Här kan du skicka data med requesten. Om du inte har någon data ska du alltid ange null p.g.a. browserinkompabilitet. xhr.abort(); // avbryter ett aktuellt anrop

1) Data skickas som text eller HTML Data skickas som ren text eller HTML Kan sedan infogas direkt in i HTMLdokumentet med t.ex. innerhtml OBS! Inte ett komplett HTMLdokument som ska skickas

Vad skickas från/till servern? 1) Gå direkt till den adress till vilket AJAX-anropet skickas: 2) En kär gammal vän: FireBug:

Eventuella teckenuppsättningsproblem Eftersom du inte i din data talar om för webbläsaren vilken teckenuppsättning som används med en <meta>-tagg så bör du se till att servern skickar ut denna information. Observera: Teckenuppsättningen nedan måste överrensstämma med den teckenuppsättning ditt dokument har sparats med! Du kan lösa detta i t.ex. asp genom att skriva: (I en.asp-fil) <%@ language="jscript" %> <% Response.CharSet = "iso-8859-1"; %> Eller i php genom att skriva: (I en.php-fil) <?php?> header("content-type:text/html; charset=iso-8859-1")

2) Data skickas som XML 2. Data skickas som XML XML Läses på samma sätt som XHTML-DOMen och infogas på lämpligt ställe i XHTML-trädet.

Proxy för att nå tredjepartsdata 3. Servern skickar vidare till klienten Vår server Det finns tekniker för Cross-domain XHR men dessa är inte helt mogna ännu. Det finns även hack: iframes, JSONP etc. http://www.w3.org/2000/08/w3c-synd/home.rss

JSON JavaScript Object Notation är (likt XML) ett datautbytes format som är lättläst för människa såväl som för maskin. JSON är ett subset av JavaScript och ska ses som språkoberoende RFC 4627 Mime application/json File.json Web http://json.org Skapare Douglas Crockford

Ett objekt beskrivet med JSON: Beskriva objekt { } "name":"bill", "type":2, "alive":false Datatyper: string, number, boolean, null, object eller array eller mer realistiskt: {"name":"bill","type":2, alive":false} Flera objekt beskrivs som en array: [{"name":"bill","type":2},{"name":"sam","type":5},{"name":"jason","type": 1 }]

Hantera JSON i JavaScript var jsonstr = '[{"name":"bill","type":2},{"name":"sam","type":5},{"name":"jason","type": 1 }] ; var people = eval(jsonstr); alert(people[0].name); // Bill eval is evil! eval är en säkerhetsrisk då den inte bara kan tolka JSON-kod utan även exekvera JavaScript. eval har en negativ inverkan på din applikations prestanda. Det finns i princip alltid en bättre lösning än eval.

Hantera JSON i JavaScript Crockford skapade en JSON serializer/parser för JavaScript och den går att ladda ner på GitHub länk på: http://www.json.org/js.html Finns inbyggt i: >=8 >=3.5 >=10.5 var jsonstr = '[{"name":"bill","type":2},{"name":"sam","type":5},{"name":"jason","type": 1 }] ; var people = JSON.parse(jsonStr); alert(people[0].name); // Bill Parse kan även ta en funktion som andra argument om man vill påverka hur tolkningen ska gå till json.stringify() finns om du vill skapa JSON utifrån befintliga js-objekt

3) Data skickas som JSON 2. Data skickas som JSON Nu kan vi enkelt tolka denna data med JSON.parse(). De flesta serversidespråk har bra stöd för JSON

Tillgänglighet/användbarhet Det finns ett antal dokumenterade problem med AJAX. Främst kan man utläsa följande frågeställningar: Är det rätt att förlita sig på JavaScript? Hur ser AJAX ut ur ett tillgänglighetsperspektiv? Hur ser AJAX ut ur ett användbarhetsperspektiv?

Nackdelar Historiken fungerar inte automatiskt. Svårt med bokmärken. Tänk på att sökmotorer inte exekverar JavaScript. Innehållet ska alltså gå att nå ändå. Tänk på att JS kan vara avstängt. Bör fungera ändå. (Om det inte är en webbapp) Svårt att läsa data från annan domän Ökar ofta belastningen på webbservern Kan ställa till bekymmer för skärmläsare

Framtiden WebSockets och Server-sent Events kan pusha data till klienten utan att den behöver efterfrågas. Möjlighet att hålla en uppkoppling mellan server och klient konstant öppen för att skicka och ta emot data.

"If all you have is a hammer, everything looks like a nail. - Dr. Abraham Maslow

Få hjälp

Postludium Kapitel 1-14 Kapitel 17, 20-24

Postludium Projektredovisningar: v1203 Restpass: Håll koll på kursen webbplats.

Postludium HTML/CSS Webbteknisk introduktion JavaScript, DOM Webbteknik I JS-API:ER Webb-API:er Mashup Webbteknik II Avancerad JS RIA-utveckling med JS Objektorienterad programmering PHP OOAD