AJAX met à jour seulement des parties d'une page web par exemple les données, avec lesquelles l'utilisateur interagit. Cette intéraction est qualifiée d'
Depuis plusieurs années, XHR est utilisé sur de nombreux sites et pages web pour ajouter des fonctionnalités intéractives, dynamiques et rendre les accès et l'utilisation plus rapides.
La méthode
L'exemple ci-dessous montre un calcul avec
Le script JAVASCRIPT-AJAX (PHP POST sans JQUERY) utilisé pour cet exemple
Pour un résultat similaire avec l'objet xhr, d'autres scripts peuvent s'appliquer de différentes manières (procédurales, fonctions, classes...).
<script>
function formAjax_v01() {
// lecture de la saisie du formulaire var nb1 = document.getElementById("nbSaisie1").value;
var nb2= document.getElementById("nbSaisie2").value;
var in3z = document.getElementById("AfficheResultat")
// pour le séparateur décimal anglais -> francais nb1 = nb1.replace(/,/g, '.');
nb2 = nb2.replace(/,/g, '.');
// validation de la saisie pour ne pas
// créer un échange de données vide
boo = true;
// une des saisies n'est pas un nombre if (isNaN(nb1) || isNaN(nb2)) {
boo = false;
}
// si ce sont des nombres, vérification des bornes if ((Number(nb1) < 0) || (Number(nb1) > 50)){
boo = false;
} else if ((Number(nb2) < 0) || (Number(nb2) > 50)){
boo = false;
}
// saisie valide
// boo est vrai
// on continue if (boo){
var e = document.getElementById("liste_deroul");
var oper = e.options[e.selectedIndex].value;
// variable envoyée au serveur php var creds = "nb1="+ nb1 + "&nb2=" + nb2 + "&oper=" + oper;
// initialisation d'un objet XMLHTTP
// compatible avec les anciens navigateurs web if (window.XMLHttpRequest) {
var ajx = new XMLHttpRequest();}
else {
var ajx = new ActiveXObject("Microsoft.XMLHTTP") ;
}
// gestion asynchrone de la connexion...
// les codes 4 et 200 sont des codes de
// de statut de la page web 1 -
// et de transmission de données - 2 -ajx.onreadystatechange = function () {
if (ajx.readyState == 4 && ajx.status == 200) {
in3z.value = ajx.responseText;
}
};
// fichier php qui réceptionne et retourne les données const url = "fichier_liaison.php";
// utilisation de la méthode POST
// true pour requête asynchrone ajx.open("POST", url, true);
ajx.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// données envoyées (asynchrone) ajx.send(creds);
} // fx
} // if boo
</script>
-
-
Le script PHP avec POST utilisé pour cet exemple
<?php
// réception POST des données saisies $nb_1 = htmlspecialchars($_POST['nb1']);
$nb_2 = htmlspecialchars($_POST['nb2']);
$nb_oper = htmlspecialchars($_POST['oper']);
// étape de gestion des incohérences ou erreurs
// de saisie nécessaire mais pas mentionnée
// utilisation de php pour renvoyer le résultat du calcul demandé if ($nb_oper === "add") {
$nb_res_1 = $nb_1 + $nb_2;
} else if ($nb_oper === "subst") {
$nb_res_1 = ($nb_1 - $nb_2) > 0 ?
$nb_1 - $nb_2 : $nb_2 - $nb_1;
}
// envoi de la réponse au script ajax echo $nb_res_1;
?>
Le script JAVASCRIPT-AJAX (PHP GET sans JQUERY)
<script>
function formAjax_v01() {
// lecture de la saisie du formulaire var nb1 = document.getElementById("nbSaisie1").value;
var nb2= document.getElementById("nbSaisie2").value;
var in3z = document.getElementById("AfficheResultat")
// pour le séparateur décimal anglais -> francais nb1 = nb1.replace(/,/g, '.');
nb2 = nb2.replace(/,/g, '.');
// validation de la saisie pour ne pas
// créer un échange de données vide
boo = true;
// une des saisies n'est pas un nombre if (isNaN(nb1) || isNaN(nb2)) {
boo = false;
}
// si ce sont des nombres, vérification des bornes if ((Number(nb1) < 0) || (Number(nb1) > 50)){
boo = false;
} else if ((Number(nb2) < 0) || (Number(nb2) > 50)){
boo = false;
}
// saisie valide
// boo est vrai
// on continue if (boo){
var e = document.getElementById("liste_deroul");
var oper = e.options[e.selectedIndex].value;
// variable envoyée au serveur php var creds = "nb1="+ nb1 + "&nb2=" + nb2 + "&oper=" + oper;
// initialisation d'un objet XMLHTTP
// compatible avec les anciens navigateurs web if (window.XMLHttpRequest) {
var ajx = new XMLHttpRequest();}
else {
var ajx = new ActiveXObject("Microsoft.XMLHTTP") ;
}
// gestion asynchrone de la connexion...
// les codes 4 et 200 sont des codes de
// de statut de la page web
// et de transmission de données ajx.onreadystatechange = function () {
if (ajx.readyState == 4 && ajx.status == 200) {
in3z.value = ajx.responseText;
}
};
// fichier php qui réceptionne et retourne les données const url = "fichier_liaison.php";
// ajout d'un ? dans l'url pour la méthode GET const urlget = url + "?" + creds;
// utilisation de la méthode GET ajx.open("GET", urlget, true);
ajx.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
// données envoyées (asynchrone) ajx.send(creds);
} // fx
} // if boo
</script>
Le script PHP avec GET
<?php
// réception POST des données saisies $nb_1 = htmlspecialchars($_GET['nb1']);
$nb_2 = htmlspecialchars($_GET['nb2']);
$nb_oper = htmlspecialchars($_GET['oper']);
// étape de gestion des incohérences ou erreurs
// de saisie nécessaire mais pas mentionnée
// utilisation de php pour renvoyer le résultat du calcul demandé if ($nb_oper === "add") {
$nb_res_1 = $nb_1 + $nb_2;
} else if ($nb_oper === "subst") {
$nb_res_1 = ($nb_1 - $nb_2) > 0 ?
$nb_1 - $nb_2 : $nb_2 - $nb_1;
}
// envoi de la réponse au script ajax echo $nb_res_1;
?>
Cet exemple a été testé avec la méthode GET sur ce lien
Les scripts ci-dessus présentent une communication basique entre un navigateur et un serveur web.
Cet exemple peut être géré entièrement avec javascript mais c'est pour montrer les possibilités de gestion d'un