Bonjour à tous,
Je suis actuellement confronté à un problème sur mon site. En effet, j'ai créer un fonction js qui s'occupe d'effectuer les traitements ajax et retourne le résultat renvoyé par le serveur.
Voici à quoi ressemble cette fonction :
////////////////////////////////////////////////////////////////////////////
// script : url du script serveur à atteindre (ex : test.php)
// donnees : donnees formattees get ou post (ex : "toto=1&tata=2" )
// methode : "post" ou "get"
// mode (1 pour synchrone, tout autre valeur pour asynchrone)
////////////////////////////////////////////////////////////////////////////
function js_client_serveur(script, donnees, methode, mode)
{
// Déclaration de notre objet ajax
var xhr_object = null;
// On déclare la variable de résultat
var resultat = null;
// Contrôle de la compatibilité navigateur
if(window.XMLHttpRequest)
{
// Firefox
xhr_object = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
// Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
}
else
{
// XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
return;
}
// Si on a choisi le mode synchrone
if(mode == 1)
{
xhr_object.open(methode, script, false);
if(methode.toUpperCase() == "POST" )
{
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
}
xhr_object.send(donnees);
resultat = xhr_object.responseText;
}
else
{
xhr_object.open(methode, script, true);
xhr_object.onreadystatechange = function()
{
if(xhr_object.readyState == 4)
{
resultat = xhr_object.responseText;
}
}
if(methode.toUpperCase() == "POST" )
{
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
}
xhr_object.send(donnees);
}
return resultat;
}
Le problème que je rencontre c'est que je suis obligé de mettre en mode synchrone, car le résultat renvoyé me sert pour effectué d'autres traitements. Or, le principe du traitement asychrone est justement de ne pas bloquer le navigateur, ce qui fait que mon script Javascript continue de s'éxécuter sans attendre que ma fonction ne lui retourne de valeur.
Ce qui m'interesse c'est d'utiliser le mode asynchrone pour récupérer mes infos car j'ai certains traitement qui peuvent prendre plusieurs secondes (fonction js_client_serveur dans une boucle) et pendant ce temps le navigateur reste figé, ce qui n'est pas très agréable aux yeux des utilisateurs.
Y a t'il un moyen de remédier a mon problème ?
Merci.