Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des...

26
Programmation Web AJAX Thierry Hamon Bureau H202 Institut Galil´ ee - Universit´ e Paris 13 & LIMSI-CNRS [email protected] http://perso.limsi.fr/hamon/Teaching/ProgWeb-20132014/ 1/25

Transcript of Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des...

Page 1: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Programmation WebAJAX

Thierry Hamon

Bureau H202Institut Galilee - Universite Paris 13

&LIMSI-CNRS

[email protected]

http://perso.limsi.fr/hamon/Teaching/ProgWeb-20132014/

1/25

Page 2: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Asynchronous Javascript And XML (AJAX)Introduction

Introduit en 2005 par Jesse James Garrett

Applications Web avec interface utilisateur

Deportation d’une partie des traitements lies a l’interface ducode cote client

Reduction des ressources utilisees cote serveurEconomie de bande passante

Exemple d’application Web AJAX :

Google Mail, Maps, Earth, etc.Liste de suggestions automatiquesTraitement de texte

2/25

Page 3: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Asynchronous Javascript And XML (AJAX)Introduction

Regroupe un ensemble de technologie Web utiliseesconjointement (HTML, CSS, DOM, Javascript,XMLHttpRequest, XML)

Permet la recuperation de donnees sur le serveur de maniereasynchrone, sans interferer avec les donnees dans la pagecourante (utilisation de l’objet XMLHttpRequest)

Utilise comme format d’echange, XML, des fichiers textes etaussi JSON

3/25

Page 4: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Asynchronous Javascript And XML (AJAX)Introduction

Deux composants (Application Web Classique) :

Serveur (implementation JAVA ou PHP par exemple)

Controle general de l’applicationPropose des ressources statiques : Modele du document,bibliotheque de scripts, feuilles de styleTraitement dynamique des donneesComposition dynamique de l’interface

Client (implementation Javascript par exemple)

Controle delegues en fonction du type de vue

Gestion des evenements utilisateurComposition dynamique de l’interface

Traitement des donnees recues

Dialogue : HTTP, (X)HTML

4/25

Page 5: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Asynchronous Javascript And XML (AJAX)Introduction

Deux composants (Application Web AJAX) :

Serveur (implementation JAVA ou PHP par exemple)

Controle general de l’applicationPropose des ressources statiques : Modele du document,bibliotheque de scripts, feuilles de styleTraitement dynamique des donnees

Composition dynamique de l’interface

Client (implementation Javascript par exemple)

Controle delegues en fonction du type de vueGestion des evenements utilisateurComposition dynamique de l’interfaceTraitement des donnees recues

Dialogue : HTTP, XML, JSON

4/25

Page 6: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

FonctionnementSchema

Source : http://www.codeproject.com/KB/showcase/FarPointAJAX.aspx

5/25

Page 7: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

FonctionnementIllustration

1 Requete asynchrone au serveur dans une fonction JavaScript,declenchee par un evenement

2 Transfert asynchrone de donnees en XML

3 Traitement dynamique du cote client pour affichage inclusionau document HTML, transformation XSLT, etc.

4 Requete asynchrone sur un document XML en utilisant unobjet XMLHttpRequest (Mozilla) ou un controle ActiveXXMLHTTP (IE)

5 Puis communication AJAX

6/25

Page 8: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

FonctionnementCommunication AJAX

Client :

Envoi de la requete :

Creation de l’objet requete (XMLHttpRequest)Specification des elements de la requete (URL, methode,headers HTTP, parametres)Association d’un gestionnaire d’evenementsEnvoi de l’objet

Reception de la reponse :

A chaque modification de l’etat de la requete : tester si dansl’etat readyTraitement des donnees recues (Ajout a l’interface,transformation XSL)

Serveur :

Definition des actions a realiser lors de la reception d’unerequete asynchrone AJAX

7/25

Page 9: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Objet XMLHttpRequest

API utilisee

par JavaScript et d’autres langages de scripts

pour transferer des donnees au format XML, texte ou JSONentre le client (navigateur) et le serveur Web

de maniere asynchrone generalement. Mais possibilited’utilisation synchrone (mais est-ce vraiment utile ? )

Creation de l’objet XMLHttpRequest : methode ActiveXObject(IE) et objet Javascript XMLHttpRequest

8/25

Page 10: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Exemples de codeCreation de l’objet requete

v a r r e q = nu l l ;f u n c t i o n g e t R e q u e s t ( ){

i f ( window . XMLHttpRequest ){

r e q = new XMLHttpRequest ( ) ;}e l s e i f ( t y p e o f A c t i v e X O b j e c t != "undefined" ){

r e q=new A c t i v e X O b j e c t ("Microsoft.XMLHTTP" ) ;}return r e q ;

}

9/25

Page 11: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Exemples de codeChargement asychrone - simple

f u n c t i o n GetDataUsingAJAX ( e l t ){

// elt : contenu d’un champs

i f ( xmlHttp != n u l l ){

// Association de la fonction de gestion de l’ etat

v a r u r l="http ://www.univ -paris13.fr/monscript.php?elt=" + e l t ;

// methode sans parametre

xmlHttp . o n r e a d y s t a t e c h a n g e = s t a t e C h a n g e d ;xmlHttp . open ( "GET" , u r l , t rue ) ;xmlHttp . send ( n u l l ) ;

}}

f u n c t i o n s t a t e C h a n g e d ( ){

i f ( xmlHttp . r e a d y S t a t e ==4) {document . getE lementBy Id ( "txt" ) . innerHTML=xmlHttp . r e s p o n s e T e x t ;

}}

10/25

Page 12: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Exemples de codeChargement asychrone - XML

f u n c t i o n GetDataUsingAJAX ( e l t ){

// elt : element XML du document

i f ( r e q != n u l l ){

// Association de la fonction de gestion de l’ etat

v a r u r l="http ://www.univ -paris13.fr/monscript.php?elt=" + e l t ;

// methode avec parametres

r e q . o n r e a d y s t a t e c h a n g e = f u n c t i o n ( ) { s t a t e C h a n g e ( e l t ) } ;

r e q . open ( "GET" , u r l , t rue ) ;// pour les requetes XML

r e q . s e t R e q u e s t H e a d e r ( "Accept" , "application/xml" ) ;r e q . send ( n u l l ) ;

}}

11/25

Page 13: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Exemples de codeGestion de l’etat - XML

f u n c t i o n s t a t e C h a n g e ( e l t ){ // elt : element XML du document

i f ( r e q . r e a d y S t a t e == 4) { // READY_STATE_COMPLETE

i f ( r e q . responseXML != n u l l ) {v a r docXML= r e q . responseXML ;

} e l s e {v a r docXML= r e q . r e s p o n s e T e x t ;docXML=p a r s e F r o m S t r i n g (docXML) ;

}v a r docXMLresult = tra i teXML (docXML) ;v a r s t r = (new X M L S e r i a l i z e r ( ) ) . s e r i a l i z e T o S t r i n g ( docXMLresult ) ;document . getE lementBy Id ( e l t ) . innerHTML += s t r ;

}}

12/25

Page 14: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Proprietes de l’objet XMLHttpRequest

StatusRenvoie l’etat de la requete

200 : OK, page trouvee404 : page non trouvee

onreadystatechange

Association d’une fonction recevant et traitant les donneesretournees par le serveur apres une requeteUtilisation d’un pointeur de fonction

13/25

Page 15: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Proprietes de l’objet XMLHttpRequest

readyState

Gestion de l’etat de la reponse du serveurA chaque changement d’etat, la fonction associee aonreadystatechange est executee

Valeurs possibles :Etat Description

0 Requete non initialisee1 Connexion etablie2 Requete recue3 Reponse en cours/Traitement de la requete en cours4 Reponse envoyee/Termine

14/25

Page 16: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Proprietes de l’objet XMLHttpRequest

responseXML

Retourne un objet DOM du XML renvoye par le serveur

responseText

Retourne une chaıne de caracteres contenant les donneeschargeesA utiliser si on ne souhaite pas traiter les donnees enJavascript mais uniquement les afficher (par exemple, donneesHTML)

15/25

Page 17: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Methode de l’objet XMLHttpRequest

Utilisation de 2 methodes pour l’envoi

open() – preparation de la requete3 arguments :

1 Methode utilisee pour l’envoi de la requete (GET ou POST)2 URL du script cote server3 booleen indiquant si la requete doit etre envoyee de maniere

asynchrone ou non

send() – envoie de la requete au serveur1 argument :

1 donnees a passer au script cote serveur

methode GET : nullmethode POST : variable ou chaıne de caracteres

16/25

Page 18: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

JavaScript Object Notation (JSON)

Format alternatif a XML

Natif en Javascript

Permet l’echange de donnees entre client et serveur sansanalyse (contrairement au XML).

JSON vs. XML :

JSON : facilite de lecture et simplicite de mise en oeuvreXML : extensible et reconnu dans tous les langages deprogrammation

17/25

Page 19: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

SyntaxeElements :

Objet : contient des

objets sous forme d’une liste de membres

{ nommembre1 : valmembre1 , nommembre2 :valmembre2 , . . . }

tableaux sous forme d’une liste de valeurs

[ v a l e u r 1 , v a l e u r 2 , . . . ]

Variable scalaire de type Number, String ou Boolean

Tableaux [ valeur1, valeur2, ...] (valeur : objet,tableau, etc.)

Valeurs litterales : null, false, true, valeur numerique,chaıne de caracteres (entre ")

Membre : "nom" : "valeur"

18/25

Page 20: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Exemple de fichier JSON

{"menu" : "Fichier" ,"commandes" : [

{"title" : "Nouveau" ,"action" : "CreateDoc"

} ,{

"title" : "Ouvrir" ,"action" : "OpenDoc"

} ,{

"title" : "Fermer" ,"action" : "CloseDoc"

}]

}

<?xml v e r s i o n="1.0" ?><r o o t>

<menu>F i c h i e r</menu><commands>

<i t em>< t i t l e>Nouveau</ v a l u e><a c t i o n>CreateDoc</ a c t i o n>

</ i tem><i t em>

< t i t l e>O u v r i r</ v a l u e><a c t i o n>OpenDoc</ a c t i o n>

</ i tem><i t em>

< t i t l e>Fermer</ v a l u e><a c t i o n>CloseDoc</ a c t i o n>

</ i tem></commands>

</ r o o t>

19/25

Page 21: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Utilisation d’un fichier JSONcote client

Recuperation des donnees avec la methode eval() et utilisation d’elements etde la syntaxe Javascript :

r e q . open ( "GET" , "fichier.json" , t rue ) ; // requete

var doc = e v a l ( ’(’ + r e q . r e s p o n s e T e x t + ’)’ ) ; // recuperation

var nomMenu = document . getE lementById ( ’jsmenu ’ ) ; // recherche

nomMenu . v a l u e = doc . menu ; // assignation

doc . commands [ 0 ] . t i t l e // lecture de la valeur "title" dans le tableau

doc . commands [ 0 ] . a c t i o n // lecture de la valeur "action" dans le tableau

{ "menu" : "Fichier" ,"commandes" : [{ "title" : "Nouveau" ,

"action" : "CreateDoc"} ,{ "title" : "Ouvrir" ,

"action" : "OpenDoc"

} ,{ "title" : "Fermer" ,

"action" : "CloseDoc"

}]

}

20/25

Page 22: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Utilisation d’un fichier JSONcote serveur

Utilisation de librairie propres a chaque langage (voirjson.org) :Java : org.json.*Perl : JSONPHP : (interne en 5.2), jsonetc.

21/25

Page 23: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Avantages et inconvenients d’AJAX

Avantages :

plus interactivite au niveau du clientreponse plus rapidereduction des transactions client/serveur (recuperation desscripts et des feuilles de style une fois pour toute)separation des methodes pour la transmission de l’informationet des formats utilises pour representer les informations

22/25

Page 24: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Avantages et inconvenients d’AJAX

Inconvenients :

Pas d’enregistrement dans l’historique du navigateur des pagesmodifiees dynamiquementSolution en modifiant la partie ancre (#) de l’URLDifficulte a bookmarker l’etat particulier d’une pagePas d’indexation possible des pages par les moteurs derechercheSi un navigateur ne supporte pas Javascript et AJAX, la pageest inutilisable

23/25

Page 25: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Alternatives

Flex et Flash : concurrents de AJAXMais possibilite de combiner leur utilisationvoir Goowy http://www.goowy.com/ (Bureau virtuel)

YAML (YAML Ain’t Markup Language) : format d’echangebase sur l’utlisation de caracteres speciaux :: & ! ? - --- [ ] *, etc.Fichier JSON : contenu YAML valide (et non l’inverse), saufles commentairesFormat YAML moins lisible que JSON ( ?)

24/25

Page 26: Programmation Web AJAX · 2014-01-16 · Contr^ole g en eral de l’application Propose des ressources statiques : Mod ele du document, biblioth eque de scripts, feuilles de style

Pour aller plus loin

Description d’AJAX :https://developer.mozilla.org/fr/AJAX

Exemples et tutoriels du W3C :http://www.w3schools.com/Ajax/ajax_examples.asp

Frameworks : voir http://www.ajaxprojects.com/

openAjax (IBM) : DojoRuby / Ruby on Rails (RoR)Plugins Eclipse : Rich Ajax Platform, Direct Web RemotingPHP : http://ajaxpatterns.org/PHP_Ajax_Frameworks

Bibliotheques :

SAJAXGoogle Web Toolkit (AJAXSLT...)

Article de Jesse James Garrett introduisant AJAX :http://www.adaptivepath.com/ideas/essays/archives/000385.php

25/25