Introduction à Ajax et ses principes
Introduction à Ajax et ses principes
La première partie de notre cours nous a permis d’apprendre les concepts et outils de base nécessaires
pour réaliser des pages Web dynamiques avec accès aux bases de données. Ces fondamentaux sont les
langages de balises, le HTML, le XML, les langages de scripts JavaScript exécuté côté client et le PHP du
côté serveur. Nous avons vu que PHP permettait l’accès aux bases de données.
Les sites et applications Web construits avec ces outils, bien que dynamiques présentent un défaut
majeur. A chaque requête, toute la page est entièrement rechargée. Cette situation soulève quelques
problèmes d’efficacité que sont :
• Lenteur de l’application.
• Excès de consommation de bande-passante.
• Blocage du côté client lors de l’attente des réponses de la part du serveur. Manque de réactivité de
l’application.
Pour résorber ces problèmes de performances des applications Web, la technologie Ajax a été mise sur
pied. Ajax (Asynchronous JavaScript And XML) est une manière de combiner JavaScript et XML de façon
à éviter quand cela est possible le rechargement complet des pages d’une part, et d’autre part, de
permettre la poursuite de l’exécution de code JavaScript en attendant le retour des réponses du
serveur. L’utilisation d’Ajax a permis de réaliser des applications Web interactives avec un niveau de
réactivité intéressante. De telles applications sont connues sous le nom de clients riches.
Toujours dans l’objectif d’améliorer la réalisation des applications Web, la bibliothèque JQuery a été créée
avec un but triple :
Cette partie du cours concerne l’étude des deux technologies Ajax et JQuery. Au terme des deux
chapitres traitant de ces technologies, l’étudiant aura acquis toutes les connaissances nécessaires
pour réaliser des applications Web répondant aux besoins de l’heure et conformes aux normes
courantes.
1
Chapitre 6 Ajax
Dans l’introduction à cette partie du cours, nous avons déjà indiqué qu’Ajax (Asynchronous JavaScript
And XML) a pour but de permettre l’exécution asynchrone de code JavaScript, le chargement partiel
de pages, et ainsi améliorer la réactivité des applications Web. Dans ce chapitre nous allons présenter
le principe de cette approche, ses limites, son fonctionnement et enfin une application mettant en
œuvre Ajax.
Pour illustrer l’approche Ajax, considérons la situation suivante. Nous avons une page Web ayant un
formulaire contenant une zone de texte et un bouton (« Charger »). On souhaite que lorsque
l’internaute clique sur le bouton, le contenu d’un fichier texte ([Link]) disponible sur le serveur soit
chargé dans la zone de texte.
<html>
<head>
<script type="text/javascript">
function wait(delay) { var
date = new Date(); var
curDate = null;
do {
curDate = new Date();
}while(curDate-date<delay);
}
function valider() {
var req = null;
[Link]="Démarrage...";
req = new XMLHttpRequest(); [Link] =
function() { if([Link] == 4){
if([Link] == 200){
2
statusText;
}
}
};
[Link]("GET", "[Link]", true);
wait(1000); [Link](null);
}
</script>
</head>
<body>
<form id="formulaire" method="" action="">
<p><input type="button" value="Charger"
onclick="javascript:valider()"/></p>
<p><textarea name="texte" rows="10" cols="80">...</textarea></p>
</form>
</body>
</html>
La principale chose à expliquer dans cette page est code JavaScript de la fonction valider(). Cette
fonction commence par initialiser la zone de texte avec « Démarrage … ». Puis on crée un objet
XMLHttpRequest avec lequel on initialise la variable req.
Ensuite le code ci-dessous permet définir une fonction anonyme qui sera appelée lorsque l’état de la requête
aura changé.
[Link] = function() {
if([Link] == 4){ if([Link]
== 200){
3
Après cette fonction, les instructions suivantes permettent d’émettre une requête demandant au
serveur de nous retourner le contenu du fichier [Link], et une seconde après on envoie la requête au
serveur.
[Link]("GET", "[Link]", true);
wait(1000); [Link](null);
Les détails sur les attributs ainsi que les méthodes de l’objet XMLHttpRequest seront expliqués dans la section
suivante.
L’image ci-dessous donne l’aperçu de notre page après un clic sur le bouton « charger » et que la requête a
réussi.
• Le client Web doit activer JavaScript. Cette contrainte conduit souvent les concepteurs Web à proposer
deux interfaces ; ce qui alourdi un peu le développement des pages.
• Le problème de comptabilité entre les navigateurs.
• La perte de repères par rapport aux fonctionnalités classiques d’un navigateur : Notamment les boutons
Précédent et Recharger, affichage de la source, sauvegarde d’une page, etc.
Certains des problèmes évoqués ci-dessus sont souvent résolus en associant JQuery à Ajax. JQuery sera
présenté dans le prochain chapitre. Pour l’instant, nous allons nous plonger dans l’étude du
fonctionnement d’Ajax.
4
les réponses. Nous allons par conséquent commencer par décrire les attributs et méthodes de cette
classe.
6.3.1 La classe XMLHttpRequest
Les attributs de la classe XMLHttpRequest sont résumés dans le tableau ci-dessous.
1. La fenêtre du navigateur Web qui initie le processus suite à une action de l’internaute sur l’interface de
la page.
2. Un script JavaScript auquel la fenêtre du navigateur s’adresse.
3. Une instance de XMLHttpRequest que le script crée et aura la charge de construire la requête et l’envoyer
au serveur.
4. Le serveur Web qui traite la requête et envoie la réponse à l’objet XMLHttpRequest.
5
L’interaction entre ces quatre acteurs peut être décrite à l’aide du diagramme de séquence présentée dans
le schéma ci-dessous.
Lorsque le script reçoit le message de la fenêtre du navigateur, il crée un objet XMLHttpRequest. Une
fois cette instance crée, il appelle successivement les méthodes open et send de l’objet pour formuler
et envoyer une requête au serveur Web. Le serveur réalise son traitement et répond à l’objet
XMLHttpRequest. Le diagramme de séquence présentée ici modélise une requête dans le traitement
s’est effectué avec succès. A la réception de la réponse favorable du serveur, l’objet XMLHttpRequest
appelle la fonction callback définit dans le script. Au terme de l’exécution de la fonction callback, le
script appelle la méthode getResponseXML() ou getResponseText() de l’objet XMLHttpRequest. Ce
dernier répond à cet appel en envoyant le document XML ou la chaine de caractères qu’il a lui-même
reçu du serveur. A la réception du document XML ou de la chaine de caractères, le script JavaScript
demande à la fenêtre du navigateur Web de modifier la page HTML et ensuite mettre à jour son
historique et favoris.
2. Attente de la réponse.
[Link] = function(){
if ([Link] == 4) { // Reçu, OK
}else { // Attendre...
6
};
3. Envoi de la requête
Première solution
Cette solution consiste à utiliser la structure if … else … pour tester le type de navigateur afin de fournir
le code approprié.
} else
try{
xhr = new ActiveXObject(’[Link]’);//Nouvelles versions IE
} catch (e) {
try{
[Link] ;
7
Dans le cas d’un fichier XML, il faut stocker la réponse dans une variable, et ensuite se servir de DOM pour
récupérer les données. Ci-dessous nous présentons un exemple.
8
[Link]; // Lecture de la données du 1er fils de l’élément
<div id="texte">
texte à remplacer...
</div>
….
Lorsque l’internaute saisie une espèce, sélectionne un pays et clique sur le bouton « Go », la liste du
milieu doit être renseignée avec la liste des forêts classées (sites) qui hébergent l’espèce et qui sont
situées dans le pays sélectionné. Si aucun résultat n’est trouvé, la liste doit être vide. Lorsque l’on
9
clique sur un site parmi les sites trouvés, la zone de texte du bas devra donner les informations
suivantes sur le site : Superficie du site, la population évaluée de l’espèce sur le site, le type de climat
du site, indication si le site est gardé ou pas.
La modification de la liste ainsi que de la zone de texte devront être effectuées avec Ajax. Les
informations sur les sites et les espèces qu’ils hébergent sont contenues dans une base de données
MySQL sur le serveur Web. La liste des pays est aussi fournie par la même base de données. Le langage
PHP devra être utilisé du côté serveur pour interroger la base de données et produire les fichiers XML
ou textes à renvoyer au client.
Les ordres SQL permettant de créer le schéma de base sont présentés ci-dessous.
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de données: `wfaune`
--
-- --------------------------------------------------------
--
1
0
-- Structure de la table `pays`
--
-- --------------------------------------------------------
--
-- Structure de la table `presence`
--
-- --------------------------------------------------------
--
-- Structure de la table `site`
--
1
1
`climat` varchar(255) NOT NULL,
`garde` tinyint(1) NOT NULL,
--
-- Contraintes pour les tables exportées
--
1
2
--
-- Contraintes pour la table `presence`
--
ALTER TABLE `presence`
ADD CONSTRAINT `presence_ibfk_1` FOREIGN KEY (`site`) REFERENCES `site`
(`idSite`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `site`
--
ALTER TABLE `site`
ADD CONSTRAINT `site_ibfk_1` FOREIGN KEY (`pays`) REFERENCES `pays`
(`codePays`) ON DELETE SET NULL ON UPDATE SET NULL;
<span id="lstPays">
<!-- emplacement de la liste des pays -->
</span>
<?php
$connexion = mysql_connect("localhost", "root", "");
if ($connexion) $ok = mysql_select_db("wfaune",
$connexion); else
1
3
while ($row = mysql_fetch_assoc($resultat)){
if ($count == 1) {
?>
Nous utilisons la fonction JavaScript « loadPays() » que nous associons à l’événement onload de la
balise body pour réaliser le chargement. Cette fonction se présente comme suit :
[Link]("lstPays").innerHTML=[Link];
}else {
[Link]("lstPays").innerHTML="";
}
}
};
[Link]("GET", "scripts/[Link]", true);
wait(50); [Link](null);
}
6.4.3 Le chargement de liste des sites
Lorsque l’internaute clique sur le bouton « Go », l’application doit rechercher tous les sites du pays
sélectionné et qui abrite l’espèce animal saisie dans le champ texte. Utilisant le même mécanisme que
précédemment, nous associons à l’attribut onclick du boutton « Go », l’appel d’une fonction JavaScript
« loadSites() » qui traitera la transaction Ajax. Un script PHP « [Link] » se charge de traiter la
requête Ajax. Les codes des deux scripts sont présentés ci-après.
1
4
Code de la fonction JavaScript « loadSites() »
function loadSites() { var req =
null; req = new XMLHttpRequest();
[Link] = function() {
if([Link] == 4){
if([Link] == 200){
[Link]("lstSites").innerHTML=[Link];
}else {
[Link]("lstSites").innerHTML="Echec de l'opération
Ajax";
}
}
};
[Link]("POST", "scripts/[Link]", true);
[Link]("Content-Type", "application/x-www-
formurlencoded"); var val1 =
[Link]; var val2 =
[Link]; var data = "pays=" + val1
+ "&espece=" + val2+"\n"; [Link](data);
}
$count = 1;
1
5
while ($row = mysql_fetch_assoc($resultat)){
if ($count == 1) {
1
6
$count++;
}
echo ('</select>');
} mysql_close($connexion);
?>
element =
[Link]('superficie').item(0);
var superfice = [Link];
element =
[Link]('climat').item(0);
var climat = [Link];
element =
[Link]('garde').item(0);
var garde = [Link];
element =
[Link]('pays').item(0);
var pays = [Link];
element =
[Link]('population').item(0);
var population = [Link];
var info = "ID site: "+id+"\n";
1
7
info = info+ "Nom du site: "+nom+"\n";
info = info+ "Superficie: "+superfice+"\n";
info = info+ "Climat: "+climat+"\n"; info =
info+ "Garde: "+garde+"\n"; info = info+ "Pays:
"+pays+"\n"; info = info+ "Population:
"+population+"\n";
[Link]("info").innerHTML=info;
}else {
[Link]("info").innerHTML="Echec Ajax";
}
}
};
[Link]("POST", "scripts/[Link]", true);
[Link]("Content-Type", "application/x-www-
formurlencoded"); var val1 =
[Link]; var val2 =
[Link]; var val3 =
[Link]; var data =
"pays="+val1+"&espece="+val2+"&site="+val3+"\n";
[Link](data);
$posted = &$_POST;
$connexion = mysql_connect("localhost", "root", ""); if
($connexion)
1
8
$count = 1;
$row = mysql_fetch_assoc($resultat);
$xml .= '<id>'.$row["idSite"].'</id>';
$xml .= '<nom>'.$row["nomSite"].'</nom>';
$xml .= '<superficie>'.$row["superficie"].'</superficie>';
$xml .= '<climat>'.$row["climat"].'</climat>';
$xml .= '<garde>'.$row["garde"].'</garde>';
$xml .= '<pays>'.$row["nomPays"].'</pays>';
$xml .= '<population>'.$row["population"].'</population>';
$xml .= '</site>';
}
mysql_close($connexion);
echo $xml;
?>
header('Content-Type: application/xml');
permet de dire à PHP que le flux à écrire devra être traité comme un flux XML, car par défaut en PHP
il est considéré comme du texte. Ainsi la dernière instruction du script
echo $xml;
1
9
Conclusion
Dans ce chapitre, nous avons présenté le principe d’Ajax qui consiste à combiner JavaScript et XML afin
d’émettre des requêtes asynchrones au serveur Web et d’utiliser les réponses du serveur pour modifier
des parties de pages Web. Ce mécanisme à l’avantage d’éviter le rechargement complet des pages
entières, ce qui d’une part évite la génération de trafic important de données entre le client et le
serveur Web, et d’autre part permet d’obtenir des pages Web plus fluides et donc plus réactives aux
commandes de l’internaute. La classe XMLHttpRequest qui au cœur de l’approche a été présentée. Ses
attributs et méthodes les plus importantes ont été décrits.
Les limites d’Ajax ont été aussi énumérées, à savoir le problème de la compatibilité des navigateurs, la
modification des fonctions habituelles des boutons des navigateurs, la contrainte d’activation de
JavaScript chez le client. Deux solutions ont été proposées pour le problème de la compatibilité des
navigateurs. La première solution consiste à tester le type de navigateur et en fonction du résultat
écrire le code approprié. La seconde solution quant à elle repose sur l’utilisation des exceptions.
Certains des autres problèmes restant seront résorbés à avec l’utilisation JQuery qui sera présenté
dans le prochain chapitre.
Nous nous sommes ensuite attaquer au fonctionnement d’Ajax. De l’émission d’une requête jusqu’à
l’obtention du résultat, nous avons détaillé les différentes phases de ce processus. Un diagramme de
séquence modélisant un scénario d’émission, envoi, traitement et réception de la réponse a été
présenté et expliqué. Les trois étapes de la construction d’une requête : création de l’instance de
XMLHttpRequest, l’attente de la réponse, et l’envoi de la requête ont été présentées avec les
instructions JavaScript correspondantes. Le traitement côté client des flux (texte ou XML) renvoyés par
le serveur afin d’extraire les informations a été détaillée. Nous avons vu que pour ce qui concerne les
2
0
fichiers XML, il fallait se servir du DOM pour extraire les données nécessaires à la mise à jour de la
page.
Enfin le chapitre s’est terminé par l’implémentation d’une page Web mettant en œuvre Ajax. Cette
application bien que très simpliste constitue un modèle permettant au lecteur de voir comment les
différentes pièces du puzzle peuvent être montées pour réaliser une application concrète.
Chapitre 7 jQuery
jQuery est un framework développé en JavaScript qui permet notamment de manipuler aisément le
DOM et AJAX, de créer des animations. La vocation première de ce Framework est de gagner du temps
dans le développement des applications: "write less, do more"(source :
[Link] ). L’ensemble de la libraire implémentant ce framework est
réalisé dans un fichier JavaScript nommé « [Link] » et peut être téléchargé à l’adresse :
[Link].
• JQuery est téléchargeable sur le site officiel [Link]. Le framework est livré sous-forme
d’un fichier JavaScript nommé [Link]. En utilisant cette version, il faut insérer dans la page
concernée la ligne :
• Google apis fournissent également une implémentation de JQuery que l’on peut exploiter dans
une page Web en insérant la ligne :
<script
src="//[Link]/ajax/libs/jquery/1.10.2/[Link]">
</script>
Avec cette deuxième approche, vous ne télécharger rien sur votre serveur, vous utiliser le cache google
pour accéder à la librairie.
2
1
de caractères, des sélecteurs CSS, XPath, des sélecteurs jQuery. Nous allons présenter le
comportement de la fonction $() pour chacun de ces types de paramètres.
Une fonction
Si la $() est appelée avec une fonction en paramètre, cette fonction sera chargée par jQuery lorsque
la page sera chargée dans le navigateur. Supposons que notre fonction en paramètre se nomme f().
Sans utiliser jQuery, on peut exécuter la fonction quand la page est chargée, en utilisant l’instruction
JavaScript :
[Link] = f(){}
Cependant, il faut noter qu’en faisant ainsi, la fonction f() ne sera exécutée qu’un dernier, lorsque tous
les éléments de la page seront déjà chargés. En utilisant l’approche jQuery, on peut faire exécuter la
fonction f() dès que possible, c’est-à-dire que son code sera téléchargé. L’appel de $() avec une fonction
f() en paramètre est réalisé selon l’une des deux syntaxes. La première stocke la fonction dans une
variable, et ensuite passe la variable en paramètre à $(). La seconde, plus directe, utilise une fonction
anonyme. Les deux syntaxes sont présentées ci-dessous :
$(function(){
// Tout ce qui est ici sera exécuté au chargement du DOM.
});
Par exemple le code ci-dessous affecte le style fond noire à la balise body de la page. Le fond du
document deviendra noir.
$([Link]).css("background-color:black");
2
2
La chaine de caractères passée en paramètre à la fonction $() est constituée de code HTML. En retour,
la fonction renvoie un objet jQuery rempli des éléments décrits dans le code HTML constituant la
chaîne. Par exemple le code suivant permet d’ajouter le paragraphe « Hello » au corps de la page.
$("<div><p>Hello</p></div>").appendTo("body")
On voit bien ici la puissance de jQuery pour sélectionner et accéder aux éléments d’une page sans
même avoir recours au DOM, d’où la partie Query du nom donné à la bibliothèque. Par ailleurs les
sélecteurs CSS, XPath et JQuery sont d’autres moyens utilisés par JQuery pour sélectionner les
éléments d’une page, et qui renforce le côté Query de la bibliothèque.
// Sélection des éléments ayant pour classe "ique", dans l'élément ayant //
pour id "fixe"
var mon_objet_jquery = $("#fixe .ique");
// Sélection des éléments <p>, enfants directs d'un élement <div> et ayant
// pour classe "ique".
var mon_objet_jquery = $("div > [Link]");
2
3
• .maClass : pour sélectionner des éléments selon leur classe,
• baliseHTML : pour éléments des éléments selon leur balise,
• et les combinaisons comme par exemple avoir un élément de balise B dont la classe est C (B.C).
(revoir section 3.4.1 du chapitre 3).
$("/html/body//p");
$("div p:lt(4)");
$("div p:input");
• …
Les éléments HTML sont emboités les uns dans les autres. Les éléments intérieurs d’un autre sont
appelés fils. Tandis que l’élément qui les contient lui est appelé parent. Le parcours DOM se base donc
sur cette structure en arbre des pages HTML. Ceci étant dit, jQuery dispose d’un ensemble de fonctions
permettant de parcours le DOM. Les plus importantes sont :
2
4
• next() : permet de sélectionner l'élément frère suivant directement l'objet ciblé.
• prevAll() : permet de sélectionner tous les éléments frères précédant l'objet ciblé.
• nextAll() : permet de sélectionner tous les éléments frères suivant l'objet ciblé. Find()
: permet de recherche un élément.
Par exemple le code ci-dessous permet de sélectionner tous les paragraphes enfants du bloc div.
Il existe une autre fonction tout aussi intéressante, la fonction slice() qui permet de sélectionner une
portion d’un tableau. La portion est spécifiée au moyen de deux indexes. L’index de départ, et l’index
de fin. Ces deux indexes sont passés en paramètres à la fonction. Par exemple le code ci-dessous
permet de sélectionner les paragraphes d’index 1 et 2.
2
5
Boucler sur les éléments
jQuery d’une forme de boucle spéciale permettant d’itérer sur les éléments d’une collection, avec la
possibilité d’appliquer un traitement à chaque élément. Cette fonctionnalité de jQuery est possible
grâce à la fonction each() illustrée ci-dessous.
$('p').each( function(){
alert( $(this).text() ); // $(this) représente l'objet courant
} );
L’ensemble des fonctions de parcours du DOM, les filtres, ainsi que le bouclage des éléments confère
à jQuery toute sa puissance et simplicité pour écrire du code JavaScript.
$('img').attr('src', 'nouveauChemin/[Link]');
$('img').attr('title', 'Nouvelle photo');
Ce code fait deux appels à la fonction $() pour modifier deux attribut d’un même élément. S’il ya
plusieurs attributs à modifier, jQuery propose une solution plus efficace qui consiste à fournir à la
fonction attr() un objet contenant le nom de chaque attribut et sa nouvelle valeur comme le montre
le code ci-après.
$('img').attr({
src : 'nouveauChemin/[Link]',
alt : 'Nouvelle photo', title :
'Nouvelle photo'
});
2
6
Suppression d’un attribut
On peut supprimer un attribut d’un élément en utilisant la méthode removeAttr(). L’attribut est alors
définitivement supprimé du DOM.
Basculer de classe
2
7
La fonction toggleClass() permet d’ajouter ou de supprimer une classe donnée. Elle a deux arguments.
Le premier permet de spécifier la classe à ajouter ou supprimer. Le second (true ou false) permet
d’ajouter (si true) ou de supprimer (si false). Les exemples fournis ci-dessous permettent de
comprendre l’utilisation de cette fonction.
On s’aperçoit qu’avec la gestion des classes que nous venons de décrire, que jQuery permet de rendre
la définition des classes dynamique.
7.1.5 L’animation
L’animation et la création de diaporama font parti des fonctionnalités qui font la puissance de jQuery.
La méthode native animate() de jQuery permet d’animer les éléments. Le principe de l’animation
consiste à appliquer une propriété CSS pendant un intervalle de temps donné en millisecondes.
$('p').animate({
width : '150px',
fontSize : '35px',
marginTop : '50px'
});
Cette animation permet d'élargir le paragraphe, le déplacera par rapport à la hauteur du document, et
fixer sa taille de police à 35px.
En plus de passer en argument un objet contenant les propriétés CSS à animer, la fonction peut
admettre plusieurs autres arguments facultatifs dont les plus importantes sont :
• duration : le temps de déroulement de l'animation, toujours en millisecondes. La valeur de
cet argument en soit un nombre entier (nombre de millisecondes), soit une chaine de
caractères. Dans ce cas la chaine doit être exclusivement l’une des trois suivantes :
o slow, qui équivaut à une durée de 600 millisecondes ; o normal, la valeur par
défaut, qui est égale à 400 millisecondes ; o et fast, qui représente une durée de
200 millisecondes seulement.
2
8
• easing : la façon d'accélérer l'animation, c'est-à-dire comment elle va évoluer au cours du
temps. Actuellement, jQuery ne propose malheureusement que deux façons de dérouler
l'animation :
o swing, qui est la valeur par défaut, fait aller l'animation de plus en plus vite au cours
du temps, et ralentit à la fin ;
o linear, qui force l'animation à se dérouler à la même vitesse durant toute l'opération.
• complete : et enfin une fonction de callback, qui est l'action appelée lorsque l'animation est
terminée.
$('p').animate({
width : '150px'
$('p').animate({
width : '150px' },
function(){
2
9
Ces méthodes ont les mêmes paramètres que hide(), show() et toggle().
Enfin il existe trois fonctions permettant de faire apparaître ou disparaître des éléments en jouant sur
l’opacité des éléments influencés. Ce sont :
1. le contenu textuel, ce qui correspond à du texte, tout simplement, sans fioritures telles que
des balises ;
2. le contenu HTML, qui représente le contenu textuel avec les balises structurelles en plus ;
3. et le contenu des éléments de formulaire, qui est la valeur des différents champs de texte, de
mot de passe, de textarea, ...
Ces trois sortes de contenu ne se manipulent pas de la même manière. Aussi allons-nous considérer
les trois cas séparement.
Le contenu textuel
Le contenu textuel est le simple et aussi le plus facile à manipuler. jQuery dispose de la fonction text()
permettant sa manipulation. Cette méthode permet soit de récupérer le contenu textuel d'un élément
s'il existe, soit de le modifier en donnant la nouvelle version en argument. Notons que le texte ne doit
pas contenir les chevrons (< et >) ; auquel cas il sera remplacés par HTML entities < et >. La
récupération et le changement du contenu d’un élément sont illustrés par le code ci-dessous :
3
0
JavaScript. Le défaut de cette fonction est qu’elle écrase l’ancien contenu. Elle n’est donc pas judicieuse
pour effectuer une insertion. Pour l’insertion proprement dite, il faut recourir à d’autres fonctions.
L’utilisation de html() est illustrée ainsi qu’il suit :
Le tableau ci-dessous résume comment insérer du contenu HTML tout en conservant l’existant. La
première colonne décrit le type d’insertion, la seconde présente la fonction jQuery utilisée, et la
dernière colonne donne un exemple de code jQuery.
Cloner un élément
La fonction jQuery clone() permet de cloner un élément. Seulement le clone crée n’est pas
systématiquement ajouté au document. Il faut donc cloner et ensuite ajouter le clone au document
comme le montrent les exemples ci-dessous.
3
1
$('body').append($clone); // puis on l'ajoute à la fin de notre document !
// on peut également tout écrire sur une seule ligne grâce au chaînage de
//méthode :
$('.objet').clone().appendTo('body');
Remplacer un élément
Les fonctions replaceWith() et replaceAll() sont utilisées pour le remplacement des éléments.
3
2
Lors de la création d’un élément, on peut également fournir les attributs de cet élément. Mais cette
façon de faire tend à rendre le code touffu et difficilement lisible. La bonne façon consiste donc à
passer en deuxième paramètre, un objet contenu tous les attributs de l’objet à créer ; comme le
montre l’exemple ci-dessous.
$('<div />', {
id : "bloc", // identifiant de l'élément
css : { // style css de l'élément
color : "red", fontSize :
"30px"
}
// etc...
});
$.(document).ready(function(){
/*
* Utilisons $.ajax pour créer une instance de XmlHttpRequest
*/
$.ajax();
});
Remarquez qu’ici, pas besoin de gérer dans notre code de problème de compatibilité des navigateurs
comme c’était le cas avec JavaScript.
$(document).ready(function(){
/*
* Ecoutons l'évènement click()
*/
$("#more_com").click(function(){
$.ajax();
3
3
});
});
Le fichier ciblé
Lorsque vous envoyez une requête HTTP, vous demandez quelque chose au serveur. Pour spécifier
quelle est la ressource ciblée (un script PHP par exemple), nous allons devoir utiliser le paramètre url
de $.ajax().
$("#more_com").click(function(){
$.ajax({
});
$("#more_com").click(function(){
$.ajax({
url : 'more_com.php', // La ressource ciblée
type : 'GET' // Le type de la requête HTTP.
});
});
L’envoi d’informations en GET
Si votre requête est de type GET, rien ne vous empêche de faire passer des paramètres avec GET pour
les utiliser côté serveur dans le tableau $_GET. Pour cela, vous pouvez utiliser le paramètre data.
$("#more_com").click(function(){
$.ajax({
url : 'more_com.php', // La ressource ciblée
type : 'GET' // Le type de la requête HTTP.
3
4
});
Dans ce exemple, du côté serveur, $_GET['utilisateur'] contiendra la valeur de la variable nom_user.
$("#more_come").click(function(){
$.ajax({
url : 'more_com.php', // La ressource ciblée
type : 'GET', // Le type de la requête HTTP
/**
* Le paramètre data n'est plus renseigné, nous ne faisons plus
passer de variable
});
});
L’envoi de requête de type POST est similaire au cas du type GET. La différence réside dans le
paramètre type qui aura la valeur POST.
$("#more_com").click(function(){
$.ajax({
url : 'more_com.php',
type : 'GET',
});
3
5
Le paramètre error indique que la requête Ajax a échoué. Il est aussi associé à une fonction qui est
appelée pour réaliser un traitement.
$("#more_com").click(function(){
$.ajax({
url : 'more_com.php',
type : 'GET', dataType
: 'html',
},
error : function(resultat, statut, erreur){
}
});
});
Enfin, le paramètre complete, est lui aussi associé à une fonction qui sera exécutée une fois que l’appel
Ajax est terminé. La structure générale d’un traitement Ajax est donc la suivante :
$("#more_com").click(function(){
$.ajax({
url : 'more_com.php',
type : 'GET', dataType
: 'html',
},
});
3
6
7.3.3 Les événements Ajax
Les événements dont il est question ici concernent Ajax. Ils sont activés dès qu’il un changement d’état
sur une requête Ajax : Lancement d’une requête Ajax, succès d’une requête Ajax, échec d’une requête.
Des fonctions dédiées : ajaxStart(), ajaxSuccess() et ajaxError() permettent de réaliser des traitement
aux déclenchements de ces événements. Le code ci-après l’illustre leur utilisation.
$("p").ajaxStart(function(){
[Link]("L'appel AJAX est lancé !");
});
$("p").ajaxSuccess(function(){ [Link]("L'appel AJAX a réussi !");
});
$("p").ajaxError(function(){ [Link]("L'appel AJAX a échoué.");
});
La fonction [Link]() utilisée dans ce code permet d’inscrire un texte dans la console.
Conclusion
Dans ce chapitre, nous avons présenté les bases du framework jQuery. Les deux méthodes d’insertion
de code jQuery dans une page ont été présentées : intégration du script [Link] ou l’utilisation des
apis google. La fonction principale de jquery : $() a été présentée. Nous avons vu que cette unique
fonction intervenait dans la réalisation de toutes les fonctionnalités de jQuery. La manipulation du
DOM, la manipulation du HTML, la réalisation des animations ont été étudiées dans ce chapitre.
Ce chapitre, a également montré comment jQuery permet de simplifier l’écriture de code Ajax. En
particulier, nous avons pu constater que le problème de compatibilité des navigateurs n’avait plus à
être géré par le développeur. Nous avons vu également comment la fonction $.ajax() en elle seule
permettait de faire de gérer de façon simplifiée une requête Ajax.
Au terme de chapitre concluant la deuxième partie de notre cours, nous sommes maintenant équipés
pour réaliser des sites et applications Web efficaces, très réactives, et capables de gérer des
animations.
La dernière partie du cours complétera notre formation en technologies Web, en proposant quelques
conseils sur la conception de sites Web, et en présentant quelques plateformes de développement
Web basées sur Java et les technologies Microsoft pour le Web.
3
7