En bedre verden med AJAX



Like dokumenter
JavaServer Pages (JSP)

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Innføring i bruk av CGI4VB

Web-programmering med JSP Løsningsforslag leksjon 3

Erlend Oftedal. Risiko og sikkerhet i IKT-systemer, Tekna

Innføring i bruk av CGI4VB

NCE TOURISM FJORD NORWAY. FJORDNETT INTERNETTFORUM 2012 Bergen, 12./13. juni 2012

Web-programmering med JSP Løsningsforslag leksjon 4

HØGSKOLEN I SØR-TRØNDELAG

Oppsummering - Kurset (10/ )

Eksamen i Internetteknologi Fagkode: IVA1379

Oppsummering - Til nå... (1/ )

Artist webside. Gruppe medlemmer Joakim Kartveit. Oppdragsgiver Tetriz Event & Management. Frode Mathiesen. Gry Anita Nilsen.

HTML-del. 1. <!-- ikke slett min kode, vær så snill --> er a) en HTML stil-tag b) en CSS stil-tag c) en HTML kommentar-tag d) en CSS kommentar-tag

Oblig 5 Webutvikling. Av Thomas Gitlevaag

EKSAMEN ITF Innføring i programmering Dato: Eksamenstid: 11/

JSP. Tilstander og synkronisering

5. JavaScript (fra leksjon 5 i faget Webteknikker)

HØGSKOLEN I SØR-TRØNDELAG

Oppbygging av innhold på responsive nettsider.

ITF Eksamensform: Skriftlig (digital) Dato: 28/

Antall oppgaver: 6. Alle trykte og skrevne hjelpemidler

1 Introduksjon til web-programmering med JSP

Javascript. Mer om layout

Hovedprosjekt. Høgskolen i Oslo data/informasjonsteknologi våren 2011 Forprosjektrapport. K-skjema og ferie kalender

Presentasjon Sammendrag Dagens situasjon Mål og rammebetingelser Moduler Løsning og alternativer...

Oppsummering - Til nå... (1/ )

EKSAMEN / 6101N WebPublisering

Innføring i Dynamisk HTML

HØGSKOLEN I SØR-TRØNDELAG

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Alt er objekter. Læreplansmål. Gløer Olav Langslet Sandvika VGS

Stikkord: Java EE, EJB, JSF, JPA, SWT, klient/tjener, Glassfish server, Application Client.

1. Klientside-validering med JavaScript

EKSAMEN Webpublisering

Brukerdokumentasjon. Webservices og webklient for kodeverk/ kodeverdi verifisering

OPPGAVE 5b og 8b Java Kode

2. Lage ASP.NET sider

- reklamebannere mobil og tablet

</html> </head> <form action= rtkst.php > <p> Fornavn? <input type= text name= fornavn <input type= submit />

Sikkerhetsfallgruver og forholdsregler i Web 2.0 med AJAX

S y s t e m d o k u m e n t a s j o n

1. Introduksjon til Ajax og Web 2.0

notater Gule lapper Mine Et praktisk eksempel med objekter IT2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Eksamen i Internetteknologi Fagkode: ITE1526

eform Suite Utvidelse for Hybrid fangst for TeleForm

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Oblig 1. Oppgave 1. Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak.

User Input / Output Handling. Innocent Code kap 3-4 INF-329 Øystein Lervik Larsen oysteinl@ii.uib.no 7/11-05

HØGSKOLEN I SØR-TRØNDELAG

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

INF1040 Oppgavesett 2: Nettsider og XHTML

Brukerkurs 16.februar 2012

HØGSKOLEN I SØR-TRØNDELAG

Forprosjektrapport. Høgskolen i Oslo Våren Dr.Klikk. Gruppe 25. Håkon Drange s Lars Hetland s127681

Sikkerhet i Pindena Påmeldingssystem

praktiske eksempler DOM Document Object Model DOM og Høst 2013 Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

Eventhandler Teknologi, kunst og design Høgskolen i Oslo og Akershus, våren Produktrapport

Løsningsforslag Test 2

Agenda. Data og grenser Kontekster XSS XSS og kompliserende kontekster Injection attacks Beskyttelse OWASP

Oppgave 1 (Etter forelesning 31/8) Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak.

Oppgave 1: Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak.

Tilstandsmaskiner med UML og Java

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

OBLIG 1 - WEBUTVIKLING

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

HØGSKOLEN I SØR-TRØNDELAG

Alle publiserte nyheter arkiveres i kategorier som du selv oppretter, Det gir deg en ryddig oversikt i arkivet senere.

Introduksjon til programmering og programmeringsspråk

file:///c:/users/michaelp/sites/dkdm/dw6/dreamweaver6.html

Innhold. Innledning... 13

Løsningsforslag til eksamen i INF1000 våren 2006

Effektiv sikkerhetstesting av webapplikasjoner med rikt innhold

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

EKSAMEN Web-publisering

En kortfattelig guide til JavaScript programmering. Joachim Haagen Skeie. Når vi bruker jquery funksjoner, må jquery inkluderes

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

PDF-konverter. Arkivverket v/quang Van Nguyen

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Siteimprove analytics Tekniske spesifikasjoner

SUKKERGRIS. Anita og Silje DAT100

1. Installering av webtjener. Litt teori

(X)HTML, CSS og JavaScript HTML. Det første dokumentet Grunnleggende programmering i Java Monica Strand 26.

Oblig 1 Webutvikling av Jon-Håkon Rabben

Forprosjektrapport For gruppe 20:

Mange nye og kule tips til utvikling av dine E-Site websider!

Bachelorprosjekt 2015

Oblig 4 Undervisningshefte i grunnleggende JavaScript programmering

Øvingsforelesning 5 Python (TDT4110)

HØGSKOLEN I SØR-TRØNDELAG

1. Installasjon av web-tjener og teori

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Dette er en demonstrasjonsside som vi skal bruke for å se litt nærmere på HTTP protokollen. Eksemplet vil også illustrere et par ting i PHP.

og bevegelse funksjoner som blir aktivert av hendelser Keyboard Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Eksempeleksamenssett for Informasjons og publiseringsteknologi faget høsten 2005.

Hjelpemidler: 4 A4-sider (2 to-sidige ark eller 4 en-sidige ark) med egenproduserte notater (håndskrevne/maskinskrevne)

Brukermanual Prosjekt nr Det Norske Veritas

Presentasjon. Kristian Hewlett- Packard

Transkript:

En bedre verden med AJAX Frode Eika Sandnes Hva er AJAX Har ikke noe med rengjøringsmidler å gjøre AJAX er et (morsomt) akronym Asynchronous Javascript And XML Henskikt: lage interaktive webapplikasjoner Også omtalt som remote scripting AJAX har en lang historie, men har blitt svært populært de siste årene 1

Hvordan greie seg uten AJAX Laste inn siden på nytt refresh Bøffertømming med javascript Skjult ramme med javascript som kontrollerer synlig ramme 2

Er det et produkt? Nei, AJAX er et programmeringsstrategi, også omtalt som et pattern AJAX er plattformuavhengig Du kan lage AJAX applikasjoner med bla: Java C#/.net PhP Perl C++ Basic assembler Motivasjon for å benytte AJAX Vanlige sider lastes alltid på nytt, de blir aldri oppdatert inkrementelt. Brukeren må vente på at siden lastes på nytt selv om det er bare en liten bit som endres. Klient-tjener modellen basert på HTTPforespørsler. 3

AJAX applikasjoner Raskere og mer responderende Dynamiske og mer interaktive Lettere og morsommere å bruke Ingredienser AJAX er avhengig av en moderne nettleser. CSS Presentasjon av informasjon DOM Dynamisk endre innholdet på siden XMLHttpRequest-objektet Hente data asynkront fra tjeneren Javascript Kobler alt sammen 4

Bruksområder for AJAX Automatisk sideoppdatering Validering av skjemafelter i sanntid Automatisk fullføring skjemautfylling Hente utfyllende info til en side dynamisk etter behov Avanserte brukergrensesnitt Synkronisering av forskjellige klienter 5

Hvordan virker AJAX? Problem: noe på en side må oppdateres og endres. Ny info må hentes fra tjener og siden må endres. Løsning uten AJAX: Laste hele siden på nytt Løsning med AJAX: Hente kun det vi trenger fra tjener og oppdatere siden ved å modifisere DOM 6

tid Side 1 klient tjener Side 2 tid Side 1 klient tjener Side 2 7

Eksempel 1: Laste inn innhold dynamisk fra tjener 8

<html> <head> <script language="javascript"> javascript definisjoner </script> </head> <body> <form> <input value="side 1" type="button" onclick='javascript:xmlhttppost("eksempel1.jsp?side=1")'></p> <input value="side 2" type="button" onclick='javascript:xmlhttppost("eksempel1.jsp?side=2")'></p> <div id="resultat"></div> </form> </body> </html> Initialisere de nødvendige variabler function xmlhttppost(strurl) var xmlhttpreq = false; var megselv = this; // Browser spesifikk kode for Mozilla/Safari if (window.xmlhttprequest) megselv.xmlhttpreq = new XMLHttpRequest(); // Browser spesifikk kode for IE else if (window.activexobject) megselv.xmlhttpreq = new ActiveXObject("Microsoft.XMLHTTP"); 9

Forberede å sende AJAXforespørselen megselv.xmlhttpreq.open('post', strurl, true); megselv.xmlhttpreq.setrequestheader('content-type', 'application/x-www-form-urlencoded'); megselv.xmlhttpreq.onreadystatechange = function() if (megselv.xmlhttpreq.readystate == 4) oppdatersiden(megselv.xmlhttpreq.responsetext); megselv.xmlhttpreq.send(); Oppdatering av html-siden function oppdatersiden(str) document.getelementbyid("resultat").innerhtml = str; 10

På tjenersiden if (request.getparameter("side").equalsignorecase("1")) <p>dette er side 1</p> else <p>dette er side 2</p> Eksempel 2: Dynamisk skjema 11

På tjeneren if (request.getparameter("side").equalsignorecase("1")) <p>dette er side 1<br/> Et tekstfelt for input <input type="text"/></p> else <p>dette er side 2<br/> Ja <input type="radio" name="radio"/><br/> Nei <input type="radio" name="radio"/></p> 12

Eksempel 3: Mono diskolys 13

. På klienten function startklokka() xmlhttppost("eksempel3.jsp"); settimeout("startklokka()", 50); </script> </head> <body onload="javascript:startklokka()"> <form> <h1>frode's Disco Lys</h1> <div id="resultat"></div> </form> </body> </html> <table bgcolor="black"> <tr> java.util.date t = new java.util.date(); int y = (int)( 5.0+3.0*Math.sin((double)t.getTime()/500.0) +2.0*Math.sin((double)t.getTime()/200.0) +Math.sin((double)t.getTime()/75.0) ); for (int i=0;i<y;i++) På tjeneren <td bgcolor="lime"> </td> for (int i=y;i<10;i++) <td bgcolor="darkgreen"> </td> </tr> </table> 14

Exempel 4: Stereo Disco lys 15

Kun endring på tjener <p> <table bgcolor="black"> <tr> java.util.date t = new java.util.date(); int y = (int)( 5.0+3.0*Math.sin(150.0+(double)t.getTime()/500.0) +2.0*Math.sin(150.0+(double)t.getTime()/200.0) +Math.sin(150.0+(double)t.getTime()/75.0) ); for (int i=0;i<y;i++) <td bgcolor="lime"> </td> for (int i=y;i<10;i++) <td bgcolor="darkgreen"> </td> </tr> </table> <br/> <table bgcolor="black"> <tr> java.util.date t2 = new java.util.date(); int y2 = (int)( 5.0+3.0*Math.sin((double)t2.getTime()/500.0) +2.0*Math.sin((double)t2.getTime()/200.0) +Math.sin((double)t2.getTime()/75.0) ); for (int i=0;i<y2;i++) <td bgcolor="lime"> </td> for (int i=y2;i<10;i++) <td bgcolor="darkgreen"> </td> </tr> </table> </p> Eksempel 5: Sende parameter med AJAX forespørsel 16

function xmlhttppost(strurl).. megselv.xmlhttpreq.send(hentparameter()); function hentparameter() var skjema = document.forms['skjema']; var ord = skjema.ord.value; parameter = 'ord=' + escape(ord); // Vi ikke bruker? før parameteren return parameter; 17

<body> <form name="skjema"> <p>ord: <input name="ord" type="text" onkeyup='javascript:xmlhttppost("eksempel5.jsp")'> <div id="resultat"></div> </form> </body> </html> <h1> = </h1> request.getparameter("ord") 18

Eksempel 6: Dynamisk innhold 19

<body> <form name="skjema"> <a href="birger.jpg" onmouseover='javascript:xmlhttppost("eksempel6.jsp?ord=birger")'>birger</a> På klienten <br/> <a href="per.jpg" onmouseover='javascript:xmlhttppost("eksempel6.jsp?ord=per")'>per</a> <br/> <a href="oddvar.jpg" onmouseover='javascript:xmlhttppost("eksempel6.jsp?ord=oddvar")'>oddvar</a> <br/> <a href="frode.jpg" onmouseover='javascript:xmlhttppost("eksempel6.jsp?ord=frode")'>frode</a> <br/> <a href="simen.jpg" onmouseover='javascript:xmlhttppost("eksempel6.jsp?ord=simen")'>simen</a> <br/> <div id="resultat"></div> </form> </body> </html> På tjeneren <img src="= request.getparameter("ord").jpg" alt="bilde = request.getparameter("ord") " width="200" /> 20

Eksempel 8: Kommunikasjon/synkronisering av klienter 21

På skriveklienten <body> <form name="skjema"> <p>ord: <input name="ord" type="text" onkeyup='javascript:xmlhttppost("eksempel8.jsp")'> <div id="resultat"></div> </form> </body> </html> På spionklienten function startlytter() xmlhttppost("eksempel8.jsp"); settimeout("startlytter()", 50); </script> </head> <body onload="javascript:startlytter()"> <form> <h1>frode's tastaturspion</h1> <div id="resultat"></div> </form> </body> </html> 22

På tjeneren! String ord=""; if (request.getparameter("ord")!=null) ord = request.getparameter("ord"); <h1> = </h1> ord Eksempel 9: Dynamisk nedtrekksliste med forslag (alla google suggest) råversjon 23

24

Visuell persepsjon Du får ikke det du ser Google suggest ser ut som blanding av nedtrekksliste og tekstfelt. Egentlig bare et tekstfelt med en tekstboks som ser ut som en nedtrekksliste. Tekstboksen er implementert med javascript mushendelsesfangere Dette gjør at tekstboksen oppfattes/oppfører seg litt som en nedtrekksliste På klienten <body> Start med å taste inn bokstaven f. <form name="skjema"> Ord <input name="ord" type="text" onkeyup='javascript:xmlhttppost("eksempel9.jsp") /> <div id="resultat"></div> </form> </body> </html> 25

På tjeneren <p>! String ordliste[] = "fan", "fanklubb", "frode", "froland", "fronter", "frida", "frukt", "fruktbar", "fruktis" ; if (request.getparameter("ord")!=null) String ord = request.getparameter("ord"); for (int i=0;i<ordliste.length;i++) if (ordliste[i].indexof(ord)==0) <div onmouseup='javascript:skjema.ord.value="= ordliste[i] "'> = ordliste[i] </div> </p> 26

Eksempel 10: Dynamisk nedtrekksliste lureversjon 27

Fargenyansen er ikke tydelig i videoen. På klienten <body> Start med å taste inn bokstaven f. <form name="skjema"> <input name="ord" type="text" onkeyup='javascript:xmlhttppost("eksempel10.jsp")'> Ord <div id="resultat"></div> </form> </body> </html> Teksten er flyttet bak slik at tekstbox og nedtrekk kommer på omtrent samme linje 28

På tjeneren <div style="width=150;background-color:ghostwhite">! String ordliste[] = "fan", "fanklubb", "frode", "froland", "fronter", "frida", "frukt", "fruktbar", "fruktis" ; Spøkelseshvit boks med liknende bredde som tekstfeltet if (request.getparameter("ord")!=null) String ord = request.getparameter("ord"); for (int i=0;i<ordliste.length;i++) if (ordliste[i].indexof(ord)==0) Blå understreket tekst <div style="color:blue;text-decoration:underline" onmouseup='javascript:skjema.ord.value="= ordliste[i] "'> = ordliste[i] </div> </div> 29

Og, så var det AJAX versjonen av analoguret Klientsiden function startklokka() xmlhttppost("analogur.jsp"); settimeout("startklokka()", 1000); </script> </head> <body onload="javascript:startklokka()"> <form> <h1>frode's AJAX klokke</h1> <div id="resultat"></div> </form> </body> </html> 30

Tjenersiden gjenbruk av analogur servleten <img src="servlet/analogur?bilde=ja"> AJAX rammeverk (java) DWR Direct Web Remoting Prototype Scriptaculous Google Web Toolkit AJAX framework for JSF og mange flere... 31

Fantasien er den eneste begrensingen!!! 32