Bonjour,
J'ai une appli JavaScript qui doit prendre des données dans une base et cela fonctionne très bien. Mon problème est que pendant que la requête se fait, l'appli doit rester disponible à l'utilisateur (car mon serveur est un peu long à la détente). J'ai donc fait en sorte d'utiliser le mode asynchrone. Mais Firefox me renvoie une erreur sur une variable qui n'est pas à jour au bon moment, car elle est utilisée AVANT sa mise à jour par la requête. Dans les précedents posts, certains ont eu ces problemes et utilisés une attente. Malheureusement plusieurs problèmes : cela bloque l'utilisateur pendant la durée de l'attente et si le serveur est particulièrement long, l'attente se termine avant la fin de la procédure, pas bien fiable donc...
Voici un bout de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function CAL_init() { res = sendData(); alert(res); CAL_placeEvent("", res[1]); }Le prog PHP fait un SELECT qui renvoie les données de la base : marche très bien !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 function sendData() { var xhr_object = null; var result; if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } xhr_object.open("POST", "cal.php", true); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { result = xhr_object.responseText.split(","); return result; } } xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send(null); }
La variable result est retournée pour initialiser la variable res de la fonction init() le problème est que la procédure se termine (donc après avoir exécuter l'instruction xhr_object.send(null)avant le retour des données et retourne donc un résultat 'undefined'. En mettant des alert() aux bons endroits j'ai pu me rendre compte que les données étaient bien retournées mais après...
Sans mettre un sleep ou wait ou je ne sais quelle attente, comment pourrais je faire pour attendre le retour des données sans bloquer l'utilisateur ?
Partager