Académique Documents
Professionnel Documents
Culture Documents
Avantages et inconvénients
Une partie des pages est mise à jour de manière asynchrone (donc non bloquante), ce qui donne plus de fluidité
à l’affichage des pages et provoque moins de temps d’attente. Le trafic sur le réseau est donc diminué : il suffit
d’envoyer les données, de récupérer les éléments de la réponse et de les positionner à l’endroit voulu sur la page
au lieu de recharger une page entière. La gestion de la page peut être facilitée, car il suffit de mettre à jour sur le
serveur des fichiers de taille réduite, parfois même seulement au format texte.
Par contre, le code est TRES délicat à mettre en œuvre, d’où risque d’augmentation du temps de développement
et des coûts. Une bonne connaissance des différentes technologies est indispensable.
Ajax est basé sur l’existence d’un objet javascript appelé XMLHttpRequest qui ne fonctionne pas avec les
anciennes versions des navigateurs ou si l’interpréteur javaScript est désactivé.
L’historique et les retours à la page précédente ne permettent plus de faire marche arrière, des parties de page
ayant été modifiées depuis le chargement initial.
Le référencement des pages Web est plus difficile à réaliser, une même page pouvant avoir au fil du temps des
contenus très différents.
L’objet XmlHttpRequest
Initialement inventé en 1998 par Microsoft pour Internet Explorer, l’objet XMLHttpRequest est un objet
JavaScript qui permet d’obtenir des données à l’aide de requêtes http :
Il a maintenant été implémenté dans Mozilla, Opéra, Netscape et Konqueror. Il nécessite que la page Web soit
dans un environnement client-serveur (donc Apache ou easyPHP activé).
Création et propriétés de l’objet XmlHttpRequest
Pour Internet Explorer, on initialise l’objet par : var xhr = new ActiveXObject("Microsoft.XMLHTTP");
ou var xhr = new ActiveXObject("Msxml2.XMLHTTP");
Pour les autres navigateurs, on utilise l’objet natif par : var xhr = new XMLHttpRequest() ;
D’où une méthode d’initialisation générale dans la fonction getXmlHttpRequest() à regarder dans le fichier
xrh0.html.
Propriétés Description
readyState Retourne l’état de la requête
0 : non initialisé
1 : ouverture (open s’est exécuté, début du transfert)
2 : envoyé (données transférées)
3 : en cours (données en réception)
4 : prêt (données entièrement reçues)
1
Licence professionnelle Management Internet et applications dans l’entreprise
• Affichage d’une fenêtre alert quand le fichier est chargé : xrh1.html. A noter : le code associé à
onreadystatechange (c-à-d le traitement à effectuer quand la requête a réussi) doit obligatoirement être défini
avant l’instruction send.
• Affichage du contenu d’un fichier XML dans une fenêtre alert : xrh4.html.
• Utilisation simple d’un fichier PHP : xrh10.html qui fait appel à la page carrecube.php.
• Passage de paramètres à une page PHP : xrh11.html demande un entier via une liste de sélection ; après
validation, la table correspondante s’affiche. Le passage d’un ou de plusieurs paramètres via Ajax se fait
obligatoirement par la méthode POST. Le fichier carrecuben.php récupère la valeur du paramètre.
2
Licence professionnelle Management Internet et applications dans l’entreprise
Exercice
Illustrations ci-dessous.
Soit la base mySQL appelée images, créée à l’aide du fichier images.dump suivant associée :
images.dump
CREATE TABLE pays (id tinyint(4) NOT NULL AUTO_INCREMENT, nom varchar(20), PRIMARY KEY(id),
UNIQUE id(id));
CREATE TABLE images (num tinyint(4) NOT NULL AUTO_INCREMENT, titre varchar(20), pays
tinyint(4), comment varchar(255), PRIMARY KEY (num), UNIQUE id (num));
La page liste-pays.php ci-dessous interroge la base de données images et propose de choisir un pays parmi ceux
figurant dans la table pays de la base :
3
Licence professionnelle Management Internet et applications dans l’entreprise
Fichier liste-pays.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/TDT/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-aquiv="Content-type" content="text/html charset=iso-8859-1" />
<script type="text/JavaScript">
function getXmlHttpRequest() {
if (window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Votre navigateur ne supporte pas XMLHTTPRequest");
xhr = false;
}
}
function afficheImages() {
getXmlHttpRequest() ;
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
menu = xhr.responseText;
document.getElementById("modele").innerHTML = menu ;
}
}
xhr.open("POST", "images.php", true);
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
selection=document.getElementById("pays");
idpays = selection.options[selection.selectedIndex].value ;
xhr.send("idpays="+idpays);
}
</script>
</head>
<body>
<form name="formulaire" action="#">
<table>
<tr><td><label for="pays">Pays</label></td>
<td><select name="pays" id="pays" onchange="afficheImages()">
<option value="">Choisir un pays</option>
<?
mysql_connect("localhost", "root","");
mysql_select_db("images");
$query=mysql_query("select * from pays");
while ($row=mysql_fetch_assoc($query)) {
echo "<option value='".$row["id"]."'>".$row["nom"]."</option>";
}
?>
</select></td></tr>
4
Licence professionnelle Management Internet et applications dans l’entreprise
<tr><td><label for="images">Images</label></td>
<td><span id="modele">
<select name="images">
<option value="">Images correspondantes</option>
</select>
</span></td></tr>
</table>
</form>
</body>
</html>
Lorsqu’un pays est choisi, la fonction afficheImages() demande au serveur d’effectuer la page images.php qui
permet d’obtenir la liste des images correspondant au pays choisi, sans rechargement complet de la page :
Fichier images.php
<?php
echo "<select name='images'>";
if (isset($_POST["idpays"])) {
mysql_connect("localhost", "root","");
mysql_select_db("images");
$query=mysql_query("select num, titre from images where pays=".$_POST["idpays"]);
while ($row=mysql_fetch_assoc($query)) {
echo "<option value='".$row["num"]."'>".$row["titre"]."</option>";
}
}
echo "</select>";
?>
Exercice
Ecrire une page liste-images.php proposant la liste des images disponibles. Lorsqu’une image est sélectionnée,
une page commentaires.php faire afficher le commentaire correspondant.