top of page

AJAX start

function getXMLHttpRequest() {

var xhr = null;

if (window.XMLHttpRequest || window.ActiveXObject) {

if (window.ActiveXObject) {

try {

xhr = new ActiveXObject("Msxml2.XMLHTTP");

} catch(e) {

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

} else {

xhr = new XMLHttpRequest();

}

} else {

alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");

return null;

}

return xhr;

}

var xhr = getXMLHttpRequest();

// Voyez la fonction getXMLHttpRequest() définie dans la partie précédente

​

xhr.open("GET", "handlingData.php", true);

xhr.send(null);

Passer des variables

Vous avez la possibilité de passer des variables au serveur. Suivant la méthode d'envoi utilisée une petite différence fait son apparition.

Dans le cas de GET les variables sont transmises directement dans l'URL :

xhr.open("GET", "handlingData.php?variable1=truc&variable2=bidule", true);

xhr.send(null);

Pour POST, il faut spécifier les variables dans l'argument de send :

xhr.open("POST", "handlingData.php", true);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xhr.send("variable1=truc&variable2=bidule");

Protéger les caractères

Avant de passer des variables, il est important de les protéger pour conserver les caractères spéciaux et les espaces. Pour cela, utilisez la fonction globale encodeURIComponent , comme ceci :

var sVar1 = encodeURIComponent("contenu avec des espaces");

var sVar2 = encodeURIComponent("je vois que vous êtes un bon élève... oopa !");

xhr.open("GET", "handlingData.php?variable1=" + sVar1 + "&variable2= " + sVar2, true);

xhr.send(null);

​

Coté Serveur

​

<?php

header("Content-Type: text/plain"); // Utilisation d'un header pour spécifier le type de contenu de la page. Ici, il s'agit juste de texte brut (text/plain).

$variable1 = (isset($_GET["variable1"])) ? $_GET["variable1"] : NULL;

$variable2 = (isset($_GET["variable2"])) ? $_GET["variable2"] : NULL;

if ($variable1 && $variable2) {

// Faire quelque chose...

echo "OK";

} else {

echo "FAIL";

}

?>

​

Changement d'Etat

​

var xhr = getXMLHttpRequest();

xhr.onreadystatechange = function() {

if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {

alert("OK"); // C'est bon \o/

}

};

xhr.open("GET", "handlingData.php", true);

xhr.send(null);

​

Récupérer Données

​

xhr.onreadystatechange = function() {

if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {

alert(xhr.responseText); // Données textuelles récupérées

}

};

​

CALL BACK attente de résultat

​

function funcA(callback) {

// instruction...

// instruction...

// instruction...

callback();

}

function funcB() {

alert("Plop");

}

funcA(funcB);

​

​

PLUS

​

function request(callback) {
    var xhr = getXMLHttpRequest();
    
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
            callback(xhr.responseText);
        }
    };
    
    xhr.open("GET", "handlingData.php", true);
    xhr.send(null);
}

function readData(sData) {
    // On peut maintenant traiter les données sans encombrer l'objet XHR.
    if (sData == "OK") {
        alert("C'est bon");
    } else {
        alert("Y'a eu un problème");
    }
}

request(readData);

​

​

Afficher XML inside file

​

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Techniques AJAX - XMLHttpRequest</title>

<script type="text/javascript" src="oXHR.js"></script>

<script type="text/javascript">

<!--

function request(callback) {

var xhr = getXMLHttpRequest();

xhr.onreadystatechange = function() {

if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {

callback(xhr.responseXML);

}

};

xhr.open("GET", "XMLHttpRequest_getXML.xml", true);

xhr.send(null);

}

function readData(oData) {

var nodes = oData.getElementsByTagName("soft");

var ol = document.createElement("ol"), li, cn;

for (var i=0, c=nodes.length; i<c; i++) {

li = document.createElement("li");

cn = document.createTextNode(nodes[i].getAttribute("name"));

li.appendChild(cn);

ol.appendChild(li);

}

document.getElementById("output").appendChild(ol);

}

//-->

</script>

</head>

<body>

<p>

<button onclick="request(readData);">Afficher le fichier XML</button>

<div id="output"></div>

</p>

</body>

</html>

​

A VOIR

​

Les listes liées c'est quelque chose d'assez habituel : une première liste déroulante permet de choisir une option, et en fonction de ce choix, on affiche le contenu d'une deuxième liste. C'est assez simple et c'est un bon exercice.

bottom of page