AJAX. Magali Contensin. ANF Dev Web ASR Carry-le-Rouet. 25 octobre 2012

Documents pareils
DOM - Document Object Model

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Programmation Web. Madalina Croitoru IUT Montpellier

TP JAVASCRIPT OMI4 TP5 SRC

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

STID 2ème année : TP Web/PHP

Séance d ED n 5 : HTML et JavaScript

HTML, CSS, JS et CGI. Elanore Elessar Dimar

SYSTÈMES D INFORMATIONS

Module BD et sites WEB

Présentation du Framework BootstrapTwitter

Document Object Model (DOM)

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

Ajax, RIA et HTML Prise en charge d Ajax

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Dans l'article précédent, vous avez appris

Panel des technologies Web

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Initiation aux techniques du Web. Cours L2 sciences cognitives séance 2 Charif HAYDAR: alchiekc@loria.fr

Introduction. Passage de sites statiques à des sites dynamiques

BES WEBDEVELOPER ACTIVITÉ RÔLE

EXPOSE. La SuisseID, qu est ce que c est? Secrétariat d Etat à l Economie SECO Pierre Hemmer, Chef du développement egovernment

Gestion du cache dans les applications ASP.NET

Attaques de type. Brandon Petty

les techniques d'extraction, les formulaires et intégration dans un site WEB

Optimiser les performances d un site web. Nicolas Chevallier Camille Roux

Sécurité des applications web. Daniel Boteanu

Programmation Internet Cours 4

Module : programmation site Web dynamique Naviguer entre les pages via site map

HTML. Notions générales

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

Démarrer avec Ajax et le php: exemple d'application

TD HTML AVEC CORRECTION

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Activités HTML. Code: act-html

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

HTML/CSS - Travaux Pratiques 2

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Gestion Électronique de Documents et XML. Master 2 TSM

Extended communication server 4.1 : VoIP SIP service- Administration

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Pack Fifty+ Normes Techniques 2013

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Documentation CAS à destination des éditeurs

FORMATION / CREATION DE SITE WEB / 4 JOURNEES Sessions Octobre 2006

Dans nos locaux au 98 Route de Sauve NÎMES. Un ordinateur PC par stagiaire, scanner, imprimante/copieur laser couleur

Aspects techniques : guide d interfaçage SSO

Formation Website Watcher

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Mysql avec EasyPhp. 1 er mars 2006

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

Architecture Multi-Niveaux

creer votre site internet en html/css

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Développement des Systèmes d Information

Architecture Orientée Service, JSON et API REST

< Atelier 1 /> Démarrer une application web

Devenez un véritable développeur web en 3 mois!

PLUGINS Guide du Développeur STEPHANE FERRARI. P l u X m l 5.4

Logiciels de référencement

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Petite définition : Présentation :

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

CHAPITRE 11. Temps réel Remy Sharp

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

4. SERVICES WEB REST 46

Sana Sellami. Licence Professionnelle SIL

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Bonnes pratiques de développement JavaScript

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Attaques applicatives

.ARCHITECTURE ET FONCTIONNEMENT

AWS avancé. Surveiller votre utilisation d EC2

API SMS CONSEIL HTTP V2.01. Sommaire. Documentation V1.0 au 21/05/2011

Les services usuels de l Internet

LES GRANDES ETAPES DE CREATION D UN WEB DESIGN

Utiliser SQL Server 2008 R2 Reporting Services comme source de donne es pour Microsoft Excel

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

SUPPORT DE COURS / HTML

Notes pour l utilisation d Expression Web

Le stockage local de données en HTML5

dmp.gouv.fr Pour en savoir plus DMP Info Service : 24h/24 7j/7

PLATE-FORMES LIBRES *AMP CYBER PAIEMENT / CYBER PLUS PAIEMENT GUIDE DE MIGRATION FACILE ET EN UNE HEURE PLATE-FORME SYSTEMPAY

Sessions en ligne - QuestionPoint

Le Web de Données Dan VODISLAV Université de Cergy-Pontoise Master Informatique M2 Plan

Jean-Pierre VINCENT Consultant indépendant

Stockage du fichier dans une table mysql:

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

Géolocalisation. Remy Sharp

PDO : PHP Data Object 1/13

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Transcription:

AJAX Magali Contensin 25 octobre 2012 ANF Dev Web ASR Carry-le-Rouet

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Présentation d AJAX agenda chat liste de tâches Google maps

Présentation d AJAX Asynchronous Javascript And XML Combinaison de technologies : (X)HTML & CSS présentation et contenu DOM manipulation du contenu Objet XMLHttpRequest communication avec le serveur XML échange de données (pas obligatoire texte, JSON) JavaScript I synchrone asynchrone Jesse James Garrett - 2005 Ajax: A New Approach to Web Applications

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Principe AJAX Actualiser une partie d une page web

Principe AJAX HTML serveur 1

Principe AJAX 2 HTML serveur 1

Principe AJAX 2 JS 3 Requête XMLHTTP HTML serveur 1 pays=angleterre

Principe AJAX 2 JS 3 Requête XMLHTTP HTML serveur 1 pays=angleterre Londres, Manchester 4 Texte brut ou extrait de code HTML ou JSON ou XML

Principe AJAX 2 JS 3 Requête XMLHTTP HTML serveur 1 pays=angleterre 5 JS + DOM Londres, Manchester Texte brut ou extrait de code HTML ou JSON ou XML 4

Plan Présentation d AJAX Principe Etapes 1. page web HTML 2. script côté serveur 3. script JavaScript Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Etape 1 page web HTML <!DOCTYPE html PUBLIC "- //W3C//DTD XHTML 1.0 Strict//EN" "hmp://www.w3.org/tr/xhtml1/dtd/xhtml1- strict.dtd"> <html xmlns="hmp://www.w3.org/1999/xhtml"> <head> <Utle>test</Utle> <script type="text/javascript" src="ajax.js"></script> </head> <body> <form acuon="traite_form.php" method="post"> <div> Choisir une agence : <br /> Nom <input type="text" name="nom" /> <br /> Pays <select name="pays" onchange="showciues(this.value, 'ciues')"> <opuon value="" selected="selected"></opuon> <opuon value="allemagne">allemagne</opuon> <opuon value="angleterre">angleterre</opuon> <opuon value="belgique">belgique</opuon> <opuon value="espagne">espagne</opuon> <opuon value="france">france</opuon> <opuon value="italie">italie</opuon> </select> <span id="ciues"></span> <br /> <input type="submit" value="envoyer" class="bumon" /> </div> </form> </body> </html> JS JS 1. Page web HTML - Inclure un script JavaScript - Définir l acuon - IdenUfier la zone à modifier

Etape 2 script côté serveur (E/S) http://.../liste_villes.php?pays=angleterre serveur Requête XMLHTTP JS Réponse XMLHTTP Londres;Manchester liste_villes.php 2. Script côté serveur - Entrées : données de la requête - SorEe : JSON/texte/XML

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre xml_hmp = new XMLHMpRequest(); // si aucun pays selecuonne 3. Script JS a) Créer la foncuon appelée dans l événement de la page HTML // fin foncuon showciues <span id="ciues"></span>

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre xml_hmp = new XMLHMpRequest(); // si aucun pays selecuonne 3. Script JS a) Créer la foncuon appelée dans l événement de la page HTML // fin foncuon showciues html <span id="ciues"></span> head body title texte script form div span node texte br texte input br texte select span br input option option

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre xml_hmp = new XMLHMpRequest(); // si aucun pays selecuonne 3. Script JS b) Créer l objet XMLHMpRequest // fin foncuon showciues <span id="ciues"></span> span node

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ 3. Script JS c) Définir le gesuonnaire d événements (appelé quand l état de l objet change) // fin foncuon showciues <span id="ciues"></span> // fin foncuon anonyme Etats de l objet span node 0 : UNSENT objet construit 1 : OPENED objet iniualisé (méthode open) 2 : HEADERS_RECEIVED requête envoyée au serveur (méthode send) 3 : LOADING réponse en cours de chargement 4 : DONE terminé

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète // fin foncuon showciues <span id="ciues"></span> // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme Etats de l objet span node 0 : UNSENT objet construit 1 : OPENED objet iniualisé (méthode open) 2 : HEADERS_RECEIVED requête envoyée au serveur (méthode send) 3 : LOADING réponse en cours de chargement 4 : DONE terminé

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète - Récupérer la réponse envoyée par le serveur : format texte/json : propriété responsetext format XML : propriété responsexml // fin foncuon showciues <span id="ciues"></span> Londres;Manchester span node // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète - Récupérer la réponse envoyée par le serveur - Modifier le contenu de la page (manipulauon de l arbre du document) // fin foncuon showciues <span id="ciues"></span> Londres;Manchester span node // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme tab_villes Londres Manchester 0 1

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne // fin foncuon showciues xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ <span id="ciues"></span> var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); for (var i = 0; i < tab_villes.length; i++) { code_html += '<opuon value="' + i + '">' + tab_villes[i] + '</opuon>'; node.innerhtml = 'Ville <select name="city">' + code_html + '</select>'; else { node.innerhtml = 'echec'; // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme tab_villes 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète - Récupérer la réponse envoyée par le serveur - Modifier le contenu de la page (manipulauon de l arbre du document) <opuon value="0">londres</opuon> <opuon value="1">manchester</opuon> Londres 0 1 span Manchester code_html node

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); for (var i = 0; i < tab_villes.length; i++) { // fin foncuon showciues <span id="ciues"></span> code_html += '<opuon value="' + i + '">' + tab_villes[i] + '</opuon>'; node.innerhtml = 'Ville <select name="city">' + code_html + '</select>'; else { node.innerhtml = 'echec'; // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète - Récupérer la réponse envoyée par le serveur - Modifier le contenu de la page (manipulauon de l arbre du document) Ville <select name="city"> <opuon value="0">londres</opuon> <opuon value="1">manchester</opuon> </select> span node

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; cities Angleterre // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); for (var i = 0; i < tab_villes.length; i++) { // fin foncuon showciues code_html += '<opuon value="' + i + '">' + tab_villes[i] + '</opuon>'; node.innerhtml = 'Ville <select name="city">' + code_html + '</select>'; else { node.innerhtml = 'echec'; // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme 3. Script JS c) Définir le gesuonnaire d événement - AMendre que la réponse HTTP soit complète - Récupérer la réponse envoyée par le serveur - Modifier le contenu de la page (manipulauon de l arbre du document) <span id="ciues"> Ville <select name="city"> <opuon value="0">londres</opuon> <opuon value="1">manchester</opuon> </select> </span> texte span option Londres select node option Manchester

Etape 3 script JavaScript funceon showciues(pays, id_elt) { var node = null; var xml_hmp = null; Angleterre try { node = document.getelementbyid(id_elt); if (pays.length == 0) { node.innerhtml = ''; return; // si aucun pays selecuonne xml_hmp = new XMLHMpRequest(); xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if ((this.readystate == 4) && (this.status == 200)) { if (this.responsetext.length > 0){ tab_villes = this.responsetext.split(';'); for (var i = 0; i < tab_villes.length; i++) { code_html += '<opuon value="' + i + '">' + tab_villes[i] + '</opuon>'; node.innerhtml = 'Ville <select name="city">' + code_html + '</select>'; else { node.innerhtml = 'echec'; // fin etat 4 DONE et reponse HTTP 200 // fin foncuon anonyme // envoyer la requete xml_hmp.open("get", "liste_villes.php?pays=" + pays, true); // asynchrone xml_hmp.send(null); // GET - > pas de donnees catch (e) { return; // fin foncuon showciues 3. Script JS d) Envoyer la requête au serveur web - Récupérer les données à envoyer au serveur - IniUaliser (méthode open) - Envoyer (méthode send)

Etape 3 script JavaScript Envoyer la requête au serveur web par la méthode GET xml_hmp.open("get", "liste_villes.php?pays=" + pays, true); xml_hmp.send(null); // GET - > pas de donnees Envoyer la requête au serveur web par la méthode POST xml_hmp.open("post", "liste_villes.php", true); xml_hmp.setrequestheader("content- type", "applicauon/x- www- form- urlencoded"); xml_hmp.send("pays=" + pays); // POST - > donnees

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Prendre en compte la latence Informer l uulisateur qu une opérauon est en cours en tâche de fond xml_hmp.onreadystatechange = funceon(){ var tab_villes = new Array(); var code_html = ''; if (this.readystate < 4){ node.innerhtml = "<img src='loader.png' alt='loading '>"; else { // si etat 4 DONE et que code reponse HTTP 200 manipuler le DOM pour afficher le select // fin foncuon anonyme

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Support par les navigateurs IE 5 introduit un contrôle ActiveX XMLHTTP XMLHttpRequest Firefox Mozilla 1.0+ (Netscape 7) Chrome Safari 1.2+ Opera 8.0+ IE 7+

Support par les navigateurs funceon getxmlhmpobject(){ var xml_hmp_obj = null; try { xml_hmp_obj = new XMLHMpRequest(); // Firefox, IE >= 7, Safari, Opera, Chrome catch(e){ try{ xml_hmp_obj = new AcUveXObject("Msxml2.XMLHTTP"); // IE 6 catch(e){ alert ("Browser does not support Ajax"); return xml_hmp_obj;

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Inconvénients navigateur JavaScript activé support de l objet XMLHttpRequest => prévoir une version qui fonctionne sans Ajax navigation historique de navigation (boutons back/forward) => fonction de callback qui restaure la page signets sécurité JavaScript activé pas d indexation du contenu dynamique latence

Plan Présentation d AJAX Principe Etapes Prendre en compte la latence Support par les navigateurs Inconvénients Avantages

Avantages Amélioration de l expérience utilisateur mise à jour locale de la page supprime l effet de rafraîchissement de la page entière diminution des temps d attente (réponse plus rapide aux actions de l utilisateur ) contrôle en temps réel du contenu des formulaires asynchrone => permet de continuer à remplir un formulaire Réduction de la bande passante seule l information nécessaire est transmise Réduction de la charge du serveur une partie des traitements est réalisée par le client (mise en page du résultat) le serveur n a pas à générer la totalité de la page à chaque demande Aucune installation nécessaire (pas de plugin) AJAX, utilisé à bon escient, fournit une expérience utilisateur similaire à celle des applications installées sur l ordinateur.

En savoir plus W3C XMLHttpRequest Level 2 Working Draft 2012 http://www.w3.org/tr/xmlhttprequest Ajax: A New Approach to Web Applications J.J. Garrett 2005 http://adaptivepath.com/ideas/ajax-new-approach-web-applications Ajax Tutorial http://www.xul.fr/en-xml-ajax.html Ajax loader icon http://www.ajaxload.info Liste Frameworks Ajax http://en.wikipedia.org/wiki/list_of_ajax_frameworks http://www.xul.fr/ajax-librairies.html Firebug (Onglet Net XHR) http://getfirebug.com/network OWASP Ajax and Other «Rich» Interface Technologies https://www.owasp.org/index.php/ajax_and_other_%22rich%22_interface_technologies OWASP Ajax Security Guidelines https://www.owasp.org/index.php/owasp_ajax_security_guidelines