Cours Ajax Java
Cours Ajax Java
Cours Ajax Java
Achref El Mouelhi
elmouelhi.achref@gmail.com
1 Introduction
3 AJAX et jQuery
Définition et caractéristiques
Avantages
Avantages
AJAX et jQuery
jQuery
Étape à suivre
Un peu d’histoire
Les navigateurs Internet Explorer dont la version est < 7 utilisent
ActiveX, développé par Microsoft, pour échanger avec le
serveur
première version : var xhr = new
ActiveXObject("Microsoft.XMLHTTP");
deuxième version : var xhr = new
ActiveXObject("Msxml2.XMLHTTP");
Étapes à suivre
method : nom de la méthode : GET, POST...
URL : URL de la page demandée
page statique : XML, txt...
page dynamique : PHP, JSP, ASP...
bool : TRUE pour dire que c’est asynchrone (l’exécution de la
fonction JavaScript se poursuivra en attendant l’arrivée de la
réponse du serveur)
Exemple :
xhr.open("GET", "page.php", true);
Avec POST :
xhr.open("POST", "page.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded
");
xhr.send("nomVar1=val1&...&nomVarN=valN");
Avec GET :
xhr.open("GET", "page.php?nomVar1=val1&...&nomVarN=valN", true);
xhr.send();
Valeur de readyState
0 : requête non initialisée
1 : requête initialisée mais pas encore envoyée
2 : requête reçue
3 : requête encours de traitement
4 : traitement de requête terminé et réponse prête
Juillet 2018, Aix-en-Provence 15 / 35
AJAX avec JavaScript Solution sans les promesses
Les méthodes
responseText : pour récupérer les données d’une réponse sous
forme de chaı̂ne de caractères
responseXML : pour récupérer les données d’une réponse sous
forme d’un objet XML que nous pouvons parcourir à l’aide des
fonctions DOM de JavaScript (getElementById()...)
Exemple
Considérons la servlet PersonneServlet
public class PersonneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public PersonneServlet() {
super();
}
La fonction valider()
requete =""; // variable globale
function valider() {
var nom = document.getElementById("nom");
var url = "SearchPersonne?nom=" + escape(nom.value);
requete = getXMLHttpRequest();
requete.open("GET", url, true);
requete.onreadystatechange = displayMessage;
requete.send();
}
Exemple
La fonction displayMessage()
function displayMessage() {
var message = "";
if ((requete.readyState == 4) && (requete.status == 200)) {
var messageTag = requete.responseXML.getElementsByTagName("message"
)[0];
message = messageTag.childNodes[0].nodeValue;
mdiv = document.getElementById("validationMessage");
mdiv.innerHTML = message;
}
}
Exemple
La fonction displayMessage()
function displayMessage() {
var message = "";
if ((requete.readyState == 4) && (requete.status == 200)) {
var messageTag = requete.responseXML.getElementsByTagName("message"
)[0];
message = messageTag.childNodes[0].nodeValue;
mdiv = document.getElementById("validationMessage");
mdiv.innerHTML = message;
}
}
Il faut
créer un nouveau dossier js dans WebContent (ou webapp pour les projets maven)
créer un fichier script.js dans js
faire référence à ce fichier dans la page JSP avec la balise
<script src=js/script.js></script>
placer les 3 fonctions JavaScript (valider, displayMessage et getXMLHttpRequest)
dans script.js
Exemple
La méthode doGet() de la servlet SearchPersonneServlet avec l’url
/SearchPersonne
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
String resultat = "valide";
String nom = request.getParameter("nom");
PersonneDaoImpl daoImpl = new PersonneDaoImpl();
boolean result = daoImpl.findByNom(nom);
response.setContentType("text/xml");
if (result) {
resultat = "invalide";
}
response.getWriter().write("<message>"+resultat+"</
message>");
}
Exemple
La méthode findByNom() du DAO
public boolean findByNom(String nom) {
Connection c = MyConnection.getConnection();
if (c !=null) {
try {
PreparedStatement ps = c.prepareStatement("select * from
personne where nom = ? ;");
ps.setString(1, nom);
ResultSet r =ps.executeQuery();
if (r.next())
return true;
else return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
return false;
}
Exemple
La fonction valider()
function valider(){
var nom = document.getElementById("nom");
var url = "SearchPersonne?nom=" + escape(nom.value);
ajax(url)
.then((res) => displayMessage(res))
.catch((err) => console.log("error"))
}
La fonction ajax()
function ajax(url) {
return new Promise(function(resolve, reject) {
let xhr = getXMLHttpRequest();
xhr.open("GET", url, false);
xhr.send();
if ((xhr.readyState == 4) && (xhr.status == 200))
resolve(xhr);
else
reject(xhr);
});
}
Exemple
La fonction displayMessage()
function displayMessage(res) {
var message = "";
var messageTag = res.responseXML.
getElementsByTagName("message")[0];
message = messageTag.childNodes[0].nodeValue;
mdiv = document.getElementById("validationMessage"
);
mdiv.innerHTML = message;
}
La fonction $.ajax()
Syntaxe :
$.ajax({param1:value1,...,paramN:valueN})
Les paramètres
async : Par défaut true pour dire asynchrone, sinon false
type : Par défaut GET, sinon POST
url : Par défaut : la page en cours, sinon la page ciblée
complete : Exécute une fonction lorsque la requête est terminée
error : Fonction à exécuter en cas d’erreur
beforeSend : Fonction à exécuter avant l’envoi de la requête
success : Fonction à exécuter en cas de réussite de la requête
contentType : Par défaut : application/x-www-form-urlencoded;
charset=UTF-8
username, password, data (les paramètres), dataType (html,
xml), timeout, ...
La fonction $.ajax()
La fonction $.ajax()
N’oublions pas de mettre à jour Vue.js
...
<script src="https://code.jquery.com/jquery
-3.3.1.js"></script>
<script src="js/script.js"></script>
</body>
Simplifier $.ajax() ? !
Simplifier $.ajax() ? !
Syntaxe :
// Attention a l’ordre des parametres
$.get(
{
param1 : value1, // data
...
paramN : valueN
},
nomFonction, // Fonction de retour
’text’ // Format des donnees de retour
);
function nomFonction(texteRetour){
// Traiter le retour de l’appel AJAX.
}
Simplifier $.ajax() ? !
Exemple :
$(’#nom’).keyup(function(){
$.get(
’SearchPersonne’,
{’nom’ : $("#nom").val()},
displayMessage,
’html’
);
function displayMessage (res) {
$("#validationMessage").html(res);
}
});
Exemple :
// afficher une image de chargement initialement
cachee
$(document).ajaxStart(function() {
$( "#loading" ).show();
});
La méthode .load()
Syntaxe :
$(selecteur).load(url,data,function(reponse,status,
xhr));
Les paramètres
La méthode .load()
Exemple 1 :
$(’#nom’).keyup(function(){
var param = $("#nom").val();
$(’#validationMessage’).load(’SearchPersonne’, {
nom:param});
});
Exemple 2 :
// charger la page.jsp en entier dans mon #container
$("#container").load("page.jsp");
Exemple 3 :
// charger l’element avec id partie1 de la page.jsp
dans mon #container
$("#container").load("page.jsp #partie1");