DHTML

  • HTML dynamique
  • DOM
  • Javascript
  • AJAX

HTML dynamique

  • Les attributs de gestions d'évènements
    • onclick, ondblclick , onmousedown , onmouseup , onmouseover, onmousemove, onmouseout, onkeypress, onkeydown et onkeyup
    • onload, onunload (uniquement avec l'élément body)
    • onsubmit, onreset (uniquement avec l'élément form)
    • onselect, onchange (uniquement avec les éléments input, select et textarea)
  • Les attributs spécifiques aux éléments gérant un focus (formulaires, cartes cliquables, liens...)
    • onfocus, onblur
  • Doivent être associés à du Javascript

Document Object Model

  • Permet de manipuler un document à l'aide d'une hiérarchie d'objets de type noeud.
  • Interface de programmation utilisée avec Javascript.
  • 3 versions standardisés par le W3C : level 1 (1998), level 2 (2000) et 3 (2004)
  • À un document XML correspond un arbre auquel est associés différents outils de parcours interne

Javascript

  • Langage de programmation développé par Netscape puis concurrencé par Microsoft avec JScript
  • ECMAScript (ECMA-262) est une normalisation visant à supprimer les nombreux problèmes liés à la guerre des navigateurs
  • Langage orienté objet avec une syntaxe à la Java et un typage implicite.

AJAX

  • Asynchronous JavaScript and XML
  • AJAX = DHTML + XMLHttpRequest + XML + XSLT
  • Permet de modifier un document morceau par morceau

Un premier script

<script type="text/javascript">
/* Définition d'une fonction message */
function message() {
  alert("Message interrompant la navigation !");
}

</script>
  <div onmouseover="javascript:message()"
          style="border:thick solid red;">
   Zone de survol interdit !
  </div>
Zone de survol interdit !

Éléments syntaxiques

  • Une variable est déclaré après le mot-clé var
  • Il existe 5 types de données primitifs : Undefined, Null, Boolean, Number et String.
  • Les opérateurs usuels sont disponibles
  • Les structures de contrôle usuelles également +(for( var i in tab))
  • Une instruction se termine par un ;
  • Les blocs sont marqués par des accolades { ... }
  • Les commentaires fonctionnent avec // et /* */

Où placer le code ?

  • Dans le document HTML (dans l'entête ou le corps de la page) encadré par la balise script
    <script type="text/javascript">
    ...
    </script>
  • Associé à un attribut événementiel directement dans une balise
    <body onload="alert(Coucou);">...</body>
  • Dans un fichier séparé (comme avec les styles CSS)
    <script type="text/javascript" src="sourcesJavascript.js"></script>

Couche objet

  • Objets prédéfinis : window, document, forms, ...
  • Exemple :
    <script type="text/javascript">
        var maintenant = new Date();
        var jour = maintenant.getDate();
        var mois = maintenant.getMonth() + 1;
        var annee = maintenant.getYear()+1900;
        var heures = maintenant.getHours();
        var minutes = maintenant.getMinutes();
        document.write("Nous sommes le "
        + jour + "." + mois + "." + annee + ". Il est maintenant "
        + heures + ":" + minutes + " heures");
    </script>
    

Définition d'une classe

  • Exemple :
      function Carte(couleur, hauteur) {
         this.couleur = couleur;
         this.hauteur = hauteur;
         this.afficheCarte = afficheCarte;
      }
    
      function afficheCarte() {
         with(this) {
           document.write("<span>"+ hauteur + " : ");
           document.write(couleur + "</span>");
         }
      }
      var asDePique = new Carte("&spades;","A");
      asDePique.afficheCarte();
    

Objets Standards

  • Les tableaux : la classe Array
  • Les chaînes de caractères : la classe String
  • Les dates et les heures : la classe Date
  • La classe Math
  • Les expressions rationnelles : la classe RegExp
  • la classe Boolean
  • la classe Number
  • la classe Global

Objets du navigateur

  • Javascript permet d'accéder à une hierarchie d'objets associée à une fenêtre (ou un onglet) de navigateur.
    hierarchie des
objets du navigateur

Objets du navigateur

HTML DOM

  • DOM Document
    • getElementById(id), createElement(name), ...
  • DOM Events
    • onclick, ondblclick, onkeypress, onload, ...
  • DOM Elements
    • getElementsByTagName(name), innerHTML, style, setAttribute, getAttribute, ...
  • Plus tous les objets spécialisés de certains éléments...

Exemple de rollover css

img.card {
 position:absolute;
 border:solid thin black;
}
img.front:hover {
 z-index : 6 !important;
}
<img class="card front" style="left:10px; top:10px; z-index:1;" src="images/pokerAh.png" alt="" />
<img class="card front" style="left:42px; top:10px; z-index:2;" src="images/pokerKh.png" alt="" />
...

Illustration

Exemple de rollover javascript

<img class="card" style="top:10px; left:10px; z-index:1;" src="images/pokerAs.png" alt="" 
     onmouseover="this.style.zIndex=6;" onmouseout="this.style.zIndex=1;" />
<img class="card" style="top:74px; left:10px; z-index:2;" src="images/pokerKs.png" alt=""  
     onmouseover="this.style.zIndex=6;" onmouseout="this.style.zIndex=2;" />
...

Illustration

Les menus

  • En attendant l'élément nl avec xHTML 2.0 ou l'élément nav avec HTML 5...
  • Un menu est naturellement associable à une liste.
  • Un sous-menu deviendra une liste interne.
  • L'affichage des sous-menus est en général dynamique.

Menus pur CSS

div#menu ul { /* div#menu > ul */
  list-style-type : none;
}

div#menu a:hover {
  color : #6060C0;
  background-color : #EFEFFF;
  font-style : oblique;
}

 /* div#menu li > ul */
div#menu li  ul {
  display : none;
}

/* div#menu li:hover > ul */
div#menu li:hover ul { 
  display : block;
  list-style-type : none;
  list-style-position : inside;
}

Menus Javascript

<script type="text/javascript" >
  function ssmenu(id) {
     var element = document.getElementById(id);
     var display = element.style.display;
     if (display == 'none') {
        element.style.display = 'block';
     }
     else {
        element.style.display = 'none';
     }
}
</script>

Menu horizontal

  • Transformer li en élément intégré et éventuellement l'associer à un positionnement flottant.
  • style css
ul { border:solid thin red; margin:0px;padding:5px;
     list-style-type:none; }
li { display:inline; border:solid thin; padding:2px; }

<ul>
  <li>Fichier</li><li>Edition</li><li>Affichage</li><li>Aide</li>
</ul>
  • Fichier
  • Edition
  • Affichage
  • Aide
  • Et sur IE ?

Références

Web 2.0

  • Ce terme est rentré dans le langage courant depuis quelques années
  • Décrit l'ensemble des sites web dit participatifs
  • La présentation et le contenu de ces sites est sujet aux modifications des internautes

Web 2.0 : deux phénomèmes

  • Evolution des interfaces utilisateurs vers plus de convivialité et d'interactivité :
    • Complétion automatique, glisser-déplacer, création à la volée, exécution en parallèle...
    • On parle désormais de Rich Internet Application
    • Le navigateur devient une plate-forme applicative dont les "sites" sont de véritable applications (Google Document)
  • Rôle des internautes :
    • 90'-2000' : le contenu est crée par des codeurs imposant leur style (lecture d'un magazine)
    • Modifications des pages à la volé (GreaseMonkey, Platypus)
    • Faire l'actualité du Web par des blogs, des sites communautaire ou les votes de popularités

AJAX : Présentation

  • 2005 : James Garret propose dans un article "Ajax: A new approach to web applications"
  • S'appuie sur la complémentarité des technologies disponibles
  • Les pages Web deviennent interactives
  • AJAX = Asynchronous JavaScript And XML
  • Donne vie aux pages par la combinaison de technologies (xHTML, XML, Javascript, DOM)
  • Le mode asynchrone est différent de l'utilisation classique (une action = une page)

But : répartition des ressources

  • Solliciter les clients plutôt que le serveur et le réseau
  • Éviter d'interroger le serveur pour le traitement des événements
  • Modification partielle d'une page sans avoir à recharger la page entière : un champ de formulaire peut être modifié sans avoir à recharger toute la page (titre, images, menus)

AJAX : Composants

  • Un code respectant les standards XHTML
  • Un style particulier via une feuille de style CSS
  • Un accès rapide aux éléments d'une page par DOM
  • Un format d'échange d'informations, XML
  • Un objet XMLHttpRequest du navigateur qui communique par requête avec le serveur
  • Javascript est exécuté coté serveur pour les communications

AJAX : Fonctionnement

  • Un évènement déclenché par un appel de fonction Javascript
  • Cette fonction identifie les éléments de la page grâce au DOM et communique avec le serveur par XMLHttpRequest
  • Une fois qu'une réponse est disponible une mise à jour partielle de la page est possible

AJAX : Mode Synchrone

  • L'utilisateur clique sur un bouton, une requête est envoyé au serveur
  • Tant que le serveur ne répond pas, le navigateur est bloqué
  • Fonctionnement classique

AJAX : Mode Asynchrone

  • Après avoir envoyé une requête au serveur, le script continue son exécution
  • Il faut vérifier par la suite que la requête a aboutie

Ajax : avantages

  • Contourne la réactualisation complète des pages
    • le serveur web transmet moins de données
    • la réponse à une action est plus rapide
    • le trafic réseau est réduit
  • Par défaut une requête Ajax n'en bloque pas une autre
  • Compatibilité des navigateurs et des systèmes (pas de plug-in)

AJAX : inconvénients

  • Impossibilité d'utiliser l'historique du navigateur (history.back())
  • Trop d'appels au serveur augmente le temps de latence
  • Nécessite l'activation de Javascript
  • Failles de sécurités, intrusion de code
  • Problèmes d'accessibilité du fait de la modification du contexte de navigation

Ajax : Technologies

  • XML
  • xHTML
  • CSS
  • Javascript
  • DOM

XML

  • eXtensible Markup Language
  • Métalangage (définition de ses propres balises)
  • Recommandation du W3C (World Wide Web Consortium )
  • Exemple :
    <?xml version="1.0" ?>
    <frac>
      <numerateur>1</numerateur>
      <denom>x <sup>n</sup></denom>
    </frac>
  • Pour en savoir plus

DOM

  • Une page HTML est convertie en XML par les navigateurs
  • Un document XML est représenté par un arbre
  • L'arbre respecte le Document Object Model
  • Représentation indépendante des navigateurs

les noeuds du DOM

  • À chaque élément du document HTML correspond un noeud du DOM
  • Un noeud est un objet qui dispose d'attributs et de méthodes
  • Attributs : innerHTML, style, ...
  • Méthodes : getAttribute(), setAttribute(), ...
  • Exemple :
    <script type="text/javascript">
    function modifierNoeud(id) {
    var element = document.getElementById(id);
    element.setAttribute("style", "background-color : red;");
    }
    </script>
    
    <div id="noeudTest">Test</div>
    <div onmouseover="modifierNoeud("noeudTest")>Survol réactif</div>
    
Test
Survol réactif

XMLHttpRequest

  • Objet javascript qui permet d'échanger entre le client et le serveur
  • Initialisation de l'objet :
    if (window.XMLHttpRequest)                 //  Objet de la fenêtre courant
    { 
        xhr = new XMLHttpRequest();     //  Firefox, Safari, ...
    } 
    else 
       if (window.ActiveXObject)                    //  Version Active
       {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");   // Internet Explorer < 7
       }
       else {
          alert("Votre navigateur ne supporte pas les objets XMLHttpRequest.");
       }

Methodes de XMLHttpRequest

  • void open(String method, String url, [boolean async = true, String user = "", String passwd = ""]); : initialise une requête (méthode, url, ...)
  • void send([data]); : Envoie une requête HTTP au serveur, transmet éventuellement des données sous forme d'une chaîne ou d'une objet DOM.
  • void abort() : annule la requête courante
  • ...
  • En détail sur developer.mozilla.org

Les 5 étapes de XMLHttpRequest

  • Par défaut, la requête est asynchrone
  • une fois envoyée, elle suis cinq étapes
    • 0 (UNINITIALIZED)  avant open()
    • 1 (LOADING)  avant send()
    • 2 (LOADED)  send() appelé, header et status disponibles
    • 3 (INTERACTIVE)  données en cours de téléchargement
    • 4 (COMPLETED)  données disponibles en totalité
  • Information accessible via l'attribut readyState

Exemple

  • Demande d'un fichier au serveur puis affichage dans une boite de dialogue
  • Code :
    <script type="text/javascript">
    if (window.XMLHttpRequest)                 //  Objet de la fenêtre courant
    { 
        xhr = new XMLHttpRequest();     //  Firefox, Safari, ...
    } 
    else {
          alert("Votre navigateur ne supporte pas les objets XMLHttpRequest.");
    }
    xhr.open("GET","fichier.txt");
    xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
       var reponse = confirm(xhr.responseText);
       alert(reponse);
       }
    }
    xhr.send();
    </script>

Exemple avec PHP

  • Accès à un document produit par PHP
  • Code javascript :
    xhr.open("GET","fichier.php");
    xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
      confirm(xhr.responseText);
    }
    xhr.send();
  • Code PHP :
    <?php
    header("Content-Type: text/plain");
    
    echo "Ceci est le contenu produit par le fichier.php 
    accédé via XMLHttpRequest, voulez vous continuer ?";
    
    ?>

Modification de document a la volée

  • Ajout d'un item de liste à cette diapo
  • Code :
    <script type="text/javascript">
    xhr.open("GET","fichier.php");
    xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
      var texteMessage = xhr.responseText;
      var liMessage = document.getElementById("message");
      alert("Abracadabra");
      liMessage.style.display = "list-item";
      liMessage.innerHTML = texteMessage;
      }
    }
    xhr.send();
    </script>

Transmission d'info au serveur (GET)

  • Via l'URL et la méthode GET
  • Code javascript  :
    xhr.open("GET","allerRetour.php?info1=chaine&info2=3");
    xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
      alert(xhr.responseText);
      }
    }
    xhr.send();
  • Code PHP :
    <?php
    header("Content-Type: text/plain");
    
    if (isset($_GET['info1']) && isset($_GET['info2'])) {
      echo "Le serveur a reçu info1=";
      echo $_GET['info1'];
      echo " et info2=";
      echo $_GET['info2'];
     }
    ?>

Transmission d'info au serveur (POST)

  • Via la méthode send() et la méthode POST
  • Code javascript  :
    xhr.open("POST","allerRetour2.php");
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xhr.onreadystatechange = function() {
    if (xhr.readyState==4) {
      alert(xhr.responseText);
      }
    }
    xhr.send("info1=chaine&info2=3");
  • Code PHP :
    <?php
    header("Content-Type: text/plain");
    
    if (isset($_POST['info1']) && isset($_POST['info2'])) {
      echo "Le serveur a reçu info1=";
      echo $_POST['info1'];
      echo " et info2=";
      echo $_POST['info2'];
     }
    ?>

Ajax / PHP / BD

  • Objectif faire des requêtes dès la saisie d'un caractère dans le formulaire
  • Voir
  • Sources

Autres technos

  • JSon (JavaScript Object Notation) : format d'échange de données qui utilise la notation objet de JavaScript.
    • codage et décodage facile,
    • bibliothèques disponibles en PHP, ...
  • JQuery : bibliothèque JavaScript qui permet de manipuler le DOM très facilement
    • $("p") sélectionne tous les éléments p d'une page
    • accepte la syntaxe XPATH, la syntaxe CSS, des méthodes propres, ...
  • ...

Améliorer la gestion des événements

  • L'utilisation des attributs onXxxx posent de nombreux problèmes :
    • Mélange du contenu et du comportement
    • Rend difficile l'association de plusieurs gestionnaires à un même élément
    • Certains événements n'existent pas systématiquement
  • Solution 1 : gestion des événements centralisée au chargement de la page
  • Solution 2 : gestion des événements DOM Level 2

Solution 1

function initEventHandlers() {
    document.getElementById(id1).onclick = fonctionClick;
    document.getElementById(idForm).onsubmit = fonctionForm;
    ...
  }
}
window.onload = initEventHandlers;
  • Avantage : HTML épuré
  • Inconvénient : impossible d'avoir plusieurs gestionnaires pour un même événement et un même élément

Solution 2

  • Utilisation du gestionnaire d'événement DOM level 2
  • Tout noeud du DOM dispose de l'interface EventTarget
  • Deux méthodes essentielles :
    • addEventListener(type, listener, useCapture)
    • removeEventListener(type, listener, useCapture)
  • type : événement concerné : click, mousedown, mouseover, ..., DOMFocusIn, ..., keypress, ...
  • listener : fonction de traitement
  • useCapture false (bouillonnement par défaut)
  • Attention : problèmes de compatibilité avec MSIE (dernières versions ?)

Taquin amélioré

function initEventHandlers() {
    var cells = document.getElementsByTagName('td');
    var nbCells = cells.length;
    for(var i=0; i<nbCells; ++i) {
	var cell = cells.item(i);
	cell.addEventListener('click',taquin,false);
  }
}
window.addEventListener('load',initEventHandlers,false)
function taquin(e) {
  var cell = e.target;
...
}

Prototype

  • Bibliothèque JavaScript
  • Initié par Sam Stephenson en 2005
  • Très bonne portabilité sur les différents navigateurs
  • http://www.prototypejs.org/
  • Élément étendu : Prototype enrichit l'interface HTMLElement du DOM de diverses méthodes aussi diverses qu'utiles.
  • Prototype 1.7.1 (août 2012)
  • Prototype 1.7.2 (avril 2014)
  • Prototype 1.7.3 (septembre 2015)
  • Pour utiliser Prototype, il suffit de charger le script prototype.js dans l'en-tête d'une page web.
  • Prototype sur GitHub

Les fonctions dollars

  • 7 fonctions globales sont disponibles
  • $ : permet d'accéder plus facilement aux éléments du DOM
  • $A : enrichie l'utilisation des tableaux (objets Array)
  • $H : pour les tableaux associatifs
  • $F : pour les valeurs des champs de saisie
  • $R : permet de manipuler des intervalles de valeur
  • $$ : récupère tous les éléments correspondant à des sélecteurs CSS
  • $w : pour générer aisément des listes de mots.

La fonction $

  • Permet l'accès aux éléments du DOM par leur identifiant 
    $(id) // objetÉtendu 
    $(obj) // objetÉtendu 
    $(id1, id2, obj) // tableau d'objetÉtendus
    
  • On peut lui transmettre un identifiant, ou un élément.
  • On récupère un objetÉtendu
  • Exemple : var cells = $('case1', 'case2', 'case3'); initialise un tableau d'objetÉtendus

La fonction $A

  • $A enrichit l'utilisation des objets Array
    $A(obj) // retourne un tableau
  • Cette fonction retourne un tableau vide lorsqu'elle reçoit un paramêtre non transformable en tableau
  • Fonctionne si l'objet dispose de la méthode toArray()
  • Fonctionne si l'objet dispose de la propriété length et de propriétés d'indice numérique.
    $A(['un', 'exemple', 'basique'])
    var objArrayisable = {
       premier: 'un',
       deuxieme: 'autre',
       dernier: 'exemple',
       toArray: function { return [this.premier, this.deuxieme, this.dernier]};
    };
    

Les fonctions $H, $F et $R

  • $H crée un objet Hash qui gère les tableaux associatifs
  • $F unifie l'accès à la valeur des champs de formulaire (attribut value effectivement sélectionné)
    $F(element) // valeur de l'élément ou tableau de valeurs (sous forme de chaînes de caractères)
  • $R génère un objet ObjecctRange qui représente un intervalle de valeur pour n'importe quel objet fournissant une méthode succ()
    var intervalle = $R(1,39);

Les fonctions $$ et $w

  • $$ récupère tous les éléments correspondant à des sélecteurs CSS
    $$('h1 + div.diapo') // tableau d'objeEtendus de div de classe diapo et ayant h1 en frère
  • Accepte les sélecteurs CSS3
  • Utilise Sizzle, le même moteur que JQuery depuis 1.7
  • $w fonction gadget permettant de créer rapidement un tableau de chaînes de caractères
    var nomsChamps = $w('case1 case2 case3');
  • Découpe automatiquement une chaîne sur les caractères d'espacement.

Le module Object

  • Object offre diverses méthodes statiques permettant d'analyser les objets javascript 
  • clone, inspect, isArray, isDate, isElement, isFunction, isHash, isNumber, isString, isUndefined, keys, toHTML, toJSON, toQueryString, values prennent un objet en paramêtre.
  • extend prend un objet destination et un objet source en paramêtres et transmet les propriétés de la source à la destination

L'extension de String

  • Multiples méthodes indispensables
  • camelize() permet de passer facilement d'un nom de propriété CSS à son équivalent DOM level 2
    $("background-color").camelize() // retourne "backgroundColor"
  • ...
  • L'api complète

L'extension de Array

  • Multiples méthodes indispensables
  • Rend Enumerable les tableaux
  • Accesseurs usuels : first(), last(), indexOf(Obj), ...
  • ...
  • L'api complète

Ajax et Prototype

  • 3 classes dédiées :
    • Ajax.Request()
    • Ajax.Response()
    • Ajax.Updater()
  • Ajax.PeriodicalUpdater

Exemple Ajax

  • Source :
    var req= new Ajax.Request('allerRetour2.php',
    			    {
    			    method:'post',
    			    parameters:  "info1=chaine&info2=3",
    			    onComplete: function(reponse) {
    			       alert("La reponse est : "+ reponse.responseText);
    			       }
    			    });
    

Exemple selections

<script src="../../lib/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function afficheMessage(e) {
  var cell = e.target;
  var dest = $("affichage"); // selection via un identifiant
  dest.innerHTML=cell.innerHTML;
}
function initEventHandlers() {
    var cells = $$("ul > li"); // selection via un selecteure css
    for(var i=0; i<cells.length; ++i) {
	var cell = cells[i];
	cell.addEventListener('mouseover',afficheMessage,false);
  }
}
window.addEventListener('load',initEventHandlers,false);
</script>
  • Début
  • Deuxième
  • Troisième
  • Dernier

 

Bilan Prototype

  • Les raisons du déclin :
    • Extension des classes js dangereuse
    • Mises à jour au ralenti : 1.6.1 09/2009, 1.7 11/2011, 1.7.1 08/2012, 1.7.2 04/2014, 1.7.3 09/2015
    • Problèmes de compatibilités avec ECMAScript 5 (cf 1)
  • Vers jQuery

jQuery

  • Bibliothèque JavaScript (comme Prototype)
  • Facilite la manipulation du DOM, des événements, ... (entre autre !)
  • Quasiment tout se passe via un objet jQuery
  • Soit par le constructeur jQuery() ou plus simplement avec $()
  • Où télécharger cette bibliothèque : jquery.com

Les sélecteurs

  • L'objet jQuery permet de sélectionner très facilement les objets du DOM.
  • Via un sélecteur CSS
    $("p")
    $("#menu li")
    $("div.diapo")
  • Via certaines syntaxe XPath
  • $("//ul/li[position()=2]")
  • Via certaines méthodes spécifiques
    $("tr:even")
    $(":input");
  • Pour en savoir plus

Manipuler le DOM

  • Manipuler le style avec la méthode css()
    • Accéder à la propriété $("p").css("color");
    • Modifier des propriétés $("p").css("color","red");
      $("p").css({'color' : 'red', 'font-weight' : 'bold';});
  • text() retourne ou définit le contenu textuel d'un élément
  • val() retourne ou définit la valeur d'un élément (de formulaire)
  • html() retourne ou définit le contenu d'un élément
  • Pour en savoir plus

Gestionnaires d'événements

  • Il existe des interfaces pour tous les événements standards qu'il suffit de définir : click(), focusIn(), hover(), keypress(), ...
  • Exemple :
    $(document).ready(function() {
      $("div").click(function() {
                        alert("Boite de dialogue inutile !");
                     });
      });
  • Pour en savoir plus

Ajax et jQuery

  • Uniformisation est simplification de la syntaxe.
  • L'objet produit est le plus souvent autosuffisant.
  • $.ajax(propriétés) utilise en paramètre un objet associés aux propriétés (async,beforeSend, complete, contentType, data, dataType, error, global, ifModified, processData, success, timeout, type, url) configurant l'appel AJAX
  • Exemple :
    $.ajax({
      type: 'POST',
      url: 'allerRetour2.php',
      data: "info1=chaine&info2=3",
      success: fonctionRappel
       });
    function fonctionRappel(reponse) {
       alert("La reponse est : "+ reponse);
    }
    
  • Les fonctions $.get(url, params, callback, type) et $.post(url, params, callback, type) simplifient (et limitent) les traitements.
  • Pour en savoir plus

Effets

  • jQuery permet de réaliser plein d'effets visuels
  • Disparition
  • Apparition
  • Déplacement
  • Source :
    $(document).ready(function() {
    $("#jqdeux").delay(800).slideUp().delay(1600).fadeIn();
    $("#jqtrois").delay(2400).fadeIn();
    $("#jqquatre").delay(3200).animate({
        opacity: 0.25,
        left: '+=50',
        height: 'toggle'
      }, 5000, null);
    
    });
    
  • Pour en savoir plus

Exemple

<script src="../../lib/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("li").mouseover(function(event) {
                var cell = event.target;
		var dest = $("#affichage");
		$("#affichage").text(cell.innerHTML);
		$("#affichage").css("border","purple dashed thick");
                $("#"+event.target.id).slideUp();
		});
});
</script>
  • Début
  • Deuxième
  • Troisième
  • Dernier

 

Bilan

  • Bien d'autres choses dans l'API très complète
  • Communauté très vivante
  • Incontournable pour développer des applis Web.
  • Il existe d'autres frameworks javascript : dojo, mootools, Yahoo!UI (YUI),...

JSON

  • JSON : JavaScript Object Notation
  • Format de données textuel dérivé de la notation objet de JavaScript
  • Format abstrait permettant de l'utiliser dans n'importe quel langage de programmation : JavaScript, PHP, Java, C, PL/SQL, ... (63 langages référencés  !)
  • Moins verbeux que XML
  • Syntaxe réduite et types de données simples à décrire
  • Site officiel

Structure d'un document JSON

  • Un document JSON peut contenir deux types de structures :
    • des ensembles de paires nom/valeur (tableau associatif)
    • et des listes ordonnées de valeurs
  • Les données inclues peuvent être de trois types :
    • objets
    • tableaux
    • valeurs génériques : tableau, objet, booléen, nombre, chaîne de caractères, null
  • Exemple de tableau d'objets ayant deux propriétés couleur et hauteur :
    [
     {"couleur":"spades", "hauteur":"A"},
     {"couleur":"hearts", "hauteur":"Q"},
     {"couleur":"hearts", "hauteur":"10"},
     {"couleur":"club", "hauteur":"J"},
     {"couleur":"diams", "hauteur":"K"}
    ]

Syntaxe JSON

  • Les tableaux :
    • délimités par des crochets
    • valeurs séparées par des virgules
    • Exemples 
      [5, 12, 30.4]
      ["rouge", "vert", "bleu"]
  • Les objets :
    • ensemble non ordonné de paires nom : valeur
    • délimités par des accolades
    • paires séparées par des virgules
    • Exemple :
      {"couleur" : "spades", "hauteur" : "A"}

Valeurs acceptées

  • Toute valeur javascript est utilisable 
    • Chaîne de caractères (délimitées par des guillemets)
    • Nombre
    • object
    • array
    • true
    • false
    • null

interface JSON

  • Définition d'une variable à partir d'une chaîne JSON :
    var asPique = JSON.parse('{"couleur" : "spades", "hauteur" : "A"}')
  • Création d'une chaîne JSON à partir d'un objet javascript
    var chaineJSON = JSON.stringify(asPique)
  • Script complet :
    var asPique = JSON.parse('{"couleur" : "spades", "hauteur" : "A"}');
    var reineCoeur = {"couleur" : "hearts", "hauteur" : "Q"};
    var chaineJSON = JSON.stringify(reineCoeur);
    console.log("AsPique : "+asPique);
    console.log("reineCoeur.couleur : "+reineCoeur.couleur+"\nreineCoeur.hauteur : "+reineCoeur.hauteur);
    console.log("chaineJSON : "+chaineJSON);
    

JSON, JQUERY et AJAX

  • jQuery.getJSON() est un racourci pour
    $.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
    });
  • Exemple :
    $.getJSON('test.json', function(data) {
    var items = [];
    $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
    });
    $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
    }).appendTo('div#ajaxjson');
    });

Fin

  • HTML5 WebSockets
  • frameworks PHP
  • CMS
  • Console Web, Firebug, Dom Inspector, ...
  • ...