E12 "Evil is going on"

Relevanta dokument
E12 "Evil is going on"

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

E13 "Behind the Wild"

PHP. Dynamiska webbsidor

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

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

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

Systemutvecklare SU14, Malmö

E07 "Greased Lightning"

Introduk+on +ll programmering i JavaScript

F8 Webbteknologier 2. PHP PHP: Hypertext Preprocessor

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

JAVASCRIPT. Beteende

WebSocket eller Ajax i Webbapplikationer

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

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

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)

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

Kursplanering Utveckling av webbapplikationer

Webbservrar, severskript & webbproduktion

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

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

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

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

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

JavaScript. En Introduktion

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

Modern webbutveckling. av Robert Welin-Berger

Moderna Jfokus, Stockholm Monday, February 4, 13

Statistik från webbplatser

Fönsterhanterare i JavaScript PWD, Personal Web Desktop

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.

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

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

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

JavaScript En Introduktion

PHP. TNMK30 - Elektronisk publicering

ASP.NET Thomas Mejtoft

Laboration 1 XML, XPath, XSLT och JSON

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

Avancerade Webbteknologier

Distribuerade affärssystem

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

Elektronisk publicering TNMK30

PageSpeed Insights. Det finns 2 omdirigeringar. Omdirigeringar gör att det tar längre tid innan sidan kan läsas in.

PHP - Fortsättning. PHP och MySQL

Dynamiska webbsystem. Ajax

EXAMENSARBETE. Asynkron webbkommunkation

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

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

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

E09 - Totally Tool Time

Webbprogrammering TDDD52

MVC med Javascript och Ajax. Filip Ekberg

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

Lämplig strömningsteknik i olika situationer för realtidsbaserade webbapplikationer

Projektuppgift- Mashup- Applikation

Säkerhet i applikationslagret och slaget om webben. John Wilander, Omegapoint, Rätt säkerhet, maj 2010

TDP013. Node.js, Mocha, Istanbul. Anders Fröberg Institutionen för Datavetenskap

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Services + REST och OAuth

Webbprogrammering. Sahand Sadjadee

Asp.net mvc intro PER KVARNBRINK,

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

Jämförelse mellan tekniker för att lagra data i webbläsare -Kan webbapplikationer anpassas för att användas offline?

JS & beteende. TNMK30 - Elektronisk publicering

Laboration 6 Formulär och stränghantering övningar/uppgifter

JavaScript in SharePoint and not just for Apps. Wictor Wilén

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

Statistik från webbplatser

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

F15 Tillgänglighet/Accessibility Dagens agenda

TDTS04 Datornät och distribuerade system, 15 mars 2010 Svar sammanställda av Juha Takkinen, IDA,

Övning (X)HTML 2. Sidan 1 av

Exemple på Tentauppgifter Webbprogrammering

Systemkrav Tekis-Bilflytt 1.3

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

Mobile Ajax. Master Thesis in Applied Information Technology. Examensarbete KTH - Tillämpad IT 20 poäng. Hydar Al Tayr Mahmud Al Hakim

Användbara webbapplikationer med AJAX

En snabb titt på XML LEKTION 6

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

Webbprogrammering - 725G54 PHP. Foreläsning II

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

PageSpeed Insights. Ta bort JavaScript- och CSS-kod som blockerar renderingen från innehåll ovanför mitten

F8 Webbteknologier 1. Dynamiska webbsidor

(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

Tips & Trix - Teknik Jeeves World Copyright 2011 Jeeves Information Systems AB

Webbplats analys emreemir.com

Räkna med ASP.NET MVC 3

Modul 6 Webbsäkerhet

MVC med Javascript och Ajax. Filip Ekberg

Webbtjänster med API er

Karlstads Universitet, Datavetenskap 1

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

Tentamen etjänster och webbprogrammering

Tentamen Nätverksprogrammering Lösningsförslag

tclogin.com Service Desk Tillgång till TeleComputing TCAnyWare

Transkript:

E12 "Evil is going on" Föreläsning 12, HT2014 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. (IE7)

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 1001110 0101011 1001110 0101011 1001110 0101011 1001110 0101011 1001110 0101011 1001110 0101011 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 var xhr = new XMLHttpRequest();

2 onreadystatechange var xhr = new XMLHttpRequest(); xhr.onreadystatechanged = function(){ }; if(xhr.readystate === 4){ } if(xhr.status == 200){ } else { } console.log(xhr.responsetext); console.log("läsfel, status:"+xhr.status); Finns 0-4 men i praktiken enbart 4 (done) som används Här kan vi nu behandla datan som kommit från servern h%ps://developer.mozilla.org/en- US/docs/ Web/HTTP/Response_codes

3 open GET var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){...}; xhr.open("get", product/125, true); Koppla alltid onreadystatechanged före open anropas! Synkront anrop: false Asynkront anrop: true

4 send GET var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){...}; xhr.open("get", "product/15432", 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 HTML-dokument som ska skickas

Vad skickas från/till servern?

2) Data skickas som XML 2. Data skickas som XML XML

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 Upptäckare 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

3 open POST var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){...}; xhr.open('post', 'setproduct.php', true); xhr.setrequestheader('content-type', 'application/json'); Tala om att datat som skickas är av typen JSON

4 send POST var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){...}; xhr.open('post', 'setproduct.php', true); xhr.setrequestheader('content-type', 'application/json'); var product = { "id": 125, "name": "Aktivitetsarmband" }; xhr.send(json.stringify(product));

Proxy för att nå tredjepartsdata 1. Gör ett XHR-anrop till vår server 3. Servern skickar vidare till klienten Vår server Det finns tekniker för Cross-domain XHR. Detta behöver då anges på servern. Det finns även hack: iframes, JSONP etc.

CORS Cross-Origin Request Sharing h%ps://developer.mozilla.org/en- US/docs/ Web/HTTP/Access_control_CORS

Nackdelar Historiken fungerar inte automatiskt. Svårt med bokmärken. Tänk på att sökmotorer inte exekverar JavaScript. (allt för bra) 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.

Everytime you use eval, Crockford eats a kitten. Källa: crockfordfacts.com