Script d'un loader Ajax

Pour mettre en place un système d'AJAX loader, souvent une petit image gif animée, nous commençons par insérer l'image dans le DOM via Javascript avant d’exécuter la requête AJAX. Ensuite, lorsque la requête AJAX est terminée, on le retire, toujours via Javascript.

Nous créons donc une fonction Javascript ajaxBox_loader() permettant, via le DOM, d'ajouter ou de retirer l'image de loader selon le paramètre qui lui est passé (true ou false). Un temps de latence factice de 2 secondes a ici été ajouté (dans le fichier PHP), afin de bien visualiser l'effet de loader.

Fichier PHP

/*** Fichier PHP (script.php) ***

* Nous utilisons la fonction sleep() de PHP, permettant
* ici de simuler une latence de 2 secondes du serveur,
* afin de bien visualiser l'effet du "loader",
* puis nous affichons un résultat.
*/


<?php
sleep(2); // Attendre 2 secondes

echo 'Hello World!';
?>

Fichier HTML

/*** HTML***/

<div id="ajaxBox"></div>

Fichier JAVASCRIPT

/*** Javascript ***/

// Au chargement de la page, déclencher la fonction ajaxBox_update()
window.onload = ajaxBox_update;


// Fonction effectuant la requête AJAX

function ajaxBox_update()
{
// Afficher le loading
ajaxBox_loader(true);

// Récupération de l'objet XHR
var xhr = getXhr();

// On assigne une fonction qui, lorsque l'état de la requête change, va traiter le résultat
xhr.onreadystatechange = function()
{
// readyState 4 = requête terminée
if (xhr.readyState == 4)
{
// status 200 = page requêtée trouvée
if (xhr.status == 200)
ajaxBox_setText(xhr.responseText);
// Page non trouvée
else
ajaxBox_setText('Error...');

// Stopper le loading
ajaxBox_loader(false);
}
};

// Préparation et éxecution de la requête
var url = 'http://site.com/script.php';
xhr.open('GET', url, true);
xhr.send(null);
}


// Fonction ajoutant ou supprimant le 'loader'

function ajaxBox_loader(pState)
{
// Ajout de l'image de loader
if (pState === true)
{
// Ajout d'un élement <img> d'id #ajaxBox_loader
var ajaxBox = document.getElementById('ajaxBox');
var img = ajaxBox.appendChild(document.createElement('img'));
img.id = 'ajaxBox_loader';
img.src = 'loader.gif';
}
// Suppression de l'image de loading
else
{
// Suppression de l'élement #ajaxBox_loader
var ajaxBox_loader = document.getElementById('ajaxBox_loader');
if (ajaxBox_loader)
ajaxBox_loader.parentNode.removeChild(ajaxBox_loader);
}
}


// Fonction de mise à jour du contenu de la div #ajaxBox
// Ajout d'un element <p> contenant le message, dans le div #ajaxBox
function ajaxBox_setText(pText)
{
var elt = document.getElementById('ajaxBox');
var p = elt.appendChild(document.createElement('p'));
p.appendChild(document.createTextNode(pText));
}

Recevez par email nos prochains conseils

Oseox sur Facebook Notifications via Facebook Oseox sur Twitter Notre actu sur twitter

Une question ? Venez la poser sur notre forum développement web !

A propos de l'auteur

Antoine Beaumont

Antoine Beaumont est Consultant Web et Développeur. Fort d'une expérience construite au sein de grandes agences Web-marketing, pour tous types de comptes, il accompagne désormais les professionnels dans leurs projets Web, de façon souple et objective.