AJAX avec jQuery 2
Transcription
AJAX avec jQuery 2
Modèle classique du web • Une requête HTTP ↔ Chargement d'une nouvelle page List of messages Display Message #1 Compose message Display Message #2 AJAX avec jQuery 2 Modèle classique : discussion • Avantages – simplicité du client – le serveur fait tout le travail de génération des pages : modèle assez sûr (sécurité) • Inconvénients – transmission fréquente de pages entières → consommation de bande passante – attente du chargement des pages parfois long, à un moment la fenêtre affiche une page blanche... → ergonomie dégradée par rapport à une application native AJAX avec jQuery 3 AJAX, Asynchronous Javascript and XML • Possibilité pour le code JavaScript d'une page d'effectuer des requêtes HTTP (sans changer de page) • Réponse asynchrone : fonction de callback Application Web AJAX avec jQuery Serveur web 4 AJAX : discussion • Avantages – La page n'échange que les données qui ont besoin de changer : un e-mail, une image, etc. → bande passante et temps de transfert réduits – La page peut rester opérationnelle pendant l'attente d'une réponse à une requête • Inconvénients – Nécessité d'avoir un moteur JavaScript performant dans le navigateur → course actuelle aux optimisations – Sécurité : attention à ne pas faire confiance au client ! – Contenu pas indexable par les moteurs de recherche – Bouton « retour » non fonctionnel par défaut AJAX avec jQuery 5 Exemples AJAX • GMail ne charge que les messages, pas la page entière • Google Maps : – ne charge que des portions carrées des cartes/images satellite (« tuiles ») – même lorsque des dalles sont en cours de chargement on peut continuer à déplacer/zoomer sur la carte • Google (moteur de recherche) : – affiche des suggestions au cours de la frappe – obtention en arrière-plan, ce qui n'empêche pas de continuer à taper AJAX avec jQuery 6 Comment utiliser les requêtes AJAX ? • À la base, utilisation de l'objet JavaScript XMLHttpRequest • Choix à faire : – mode synchrone ou asynchrone – type de requête HTTP : GET, PUT (dépend du côté serveur) – format d'échange : XML ou JSON Différences d'implémentation entre les navigateurs AJAX avec jQuery 7 Requête synchrone Script JavaScript formulation requête AJAX résultat Client (navigateur) AJAX avec jQuery Objet XML Http Request Serveur web Réseau Serveur 8 Requête asynchrone Script JavaScript formulation requête AJAX function de callback résultat Client (navigateur) AJAX avec jQuery Objet XML Http Request Serveur web Réseau Serveur 9 Exemple asynchrone function handler() { if(this.readyState == 4 && this.status == 200) { // so far so good if(this.responseXML != null) process(this.responseXML.getDocumentElement()); // else an error occurred } else if (this.readyState == 4 && this.status != 200) { // fetched the wrong page or network error... } } var client = new XMLHttpRequest(); client.onreadystatechange = handler; client.open("GET", "http://example.com/myService"); client.send(); AJAX avec jQuery 10 Précautions en mode asynchrone Quand on lance une requête asynchrone : – rien ne garantit que les résultats de la précédente sont arrivés – l'ordre des réponses peut même être inversé → nécessité de prendre en compte ces aléas : ils ne doivent pas perturber le fonctionnement de l'application Exemple : Si on tape « a » puis « b » dans le champ de recherche Google, si le résultat de la recherche pour « a » arrive après celui pour « ab » il ne faut pas afficher les résultats pour « a » ! AJAX avec jQuery 11 GET ou POST ? • GET – Les paramètres éventuels sont dans l'URL – L'URL peut être mémorisée dans les favoris/marque-pages, elle peut être indexée par les moteurs de recherche → ne doit pas provoquer de mise à jour sur le serveur, uniquement l'obtention de données • POST – En plus de l'URL on peut envoyer des données au serveur (XML, JSON...) → convient bien à la modification de données AJAX avec jQuery 12 AJAX avec jQuery • Simplifie l'utilisation, masque les incompatibilités entre navigateurs • Exemple précédent : $.ajax({ url: "http://example.com/myService", dataType: "xml", type: "GET", success: processSuccess, error: processError, }); function processSuccess(data) { ... Objet jQuery → manipulable ! } function processError() { ... } AJAX avec jQuery 13 Requêtes inter-domaines • Par défaut, les requêtes inter-domaines sont interdites : Same-Origin Policy a.fr Page http://a.fr/truc → téléchargée sur a.fr b.org • b.org peut autoriser les requêtes émanant d'autres domaines avec l'en-tête HTTP Access-Control-Allow-Origin: * AJAX avec jQuery 14 Contourner la restriction Mettre en place un « proxy » sur votre serveur web : a.fr Page http://a.fr/truc → téléchargée sur a.fr b.org AJAX avec jQuery 15 Exemple AJAX avec jQuery, données JSON Appel à l'API de Flickr $(function() { $.ajax({ url: "http://www.flickr.com/services/rest/? method=flickr.photos.search& api_key=...& format=json&nojsoncallback=1& text=Supelec", dataType: "json", success: processSuccess, error: processError, }); AJAX avec jQuery URL construite en suivant la documentation de l'API Flickr 16 Versions abrégées 1 Requête AJAX asynchrone, avec fonction de callback $.get( "fichier.html", {id:1}, function(data){ console.log(data); } ); AJAX avec jQuery $.getJSON( "fichier.json", {id:1}, function(users) { console.log (users[0].name); } ); 17 Versions abrégées 2 Charger le contenu d'un fichier HTML dans une balise : Forme simple : $("div").load("fichier.html"); Avec arguments : $("div#content").load( "fichier.php", {"nom":"toto"}); Ne charger qu'une partie du contenu du fichier : $("div").load('test.html #monid') AJAX avec jQuery 18 Exemples de services web • Flickr – http://www.flickr.com/services/rest/ • Google Books – https://www.googleapis.com/books/v1/volumes?q=boulle+kwai – doc : http://code.google.com/intl/frFR/apis/books/docs/v1/getting_started.html – JSON • http://www.w3.org/wiki/CORS_Enabled AJAX avec jQuery 19 xkcd.com, 7 décembre 2012 20