[AJAX] appels de Javascript avec XMLHttpRequest aléatoire
Bonsoir à tous,
j'aurais besoin de votre aide sur une partie de mon code qui ne fonctionne pas correctement...
j'ai pas mal modifié de choses et je dois avoir fait quelque chose de travers mais impossible de m'y retrouver !
voici les explications...
j'ai une page JSP qui a 3 div différent qui appellent chacun une fonction de mon fichier .js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<div id="alarms" align="left">
<script type="text/JavaScript">
checkForCapteurs();
</script>
</div>
<div id="messages" align="left">
<script type="text/JavaScript">
checkForMessages();
</script>
</div>
<div id="commandes" align="left">
<script type="text/JavaScript">
checkForCommandes();
</script>
</div> |
les trois commandes sont à peu près identiques, elle envoient un tag spécifique à une Servlet qui renvoit des données d"une base de données au Javascript.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
var req;
function initRequest(url) {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function checkForMessages() {
var url = "http://192.168.0.10:8080/EMI/ModulePooling/messages";
initRequest(url);
req.onreadystatechange = processReqMessages;
req.open("GET", url, true);
req.send(null);
}
// callback
function processReqMessages() {
var select = window.document.getElementById("messages");
if (req.readyState == 4) {
if (req.status == 200) {
select.innerHTML = "";
var message = "";
var elements = req.responseXML.getElementsByTagName("message");
for(var i=0;i<elements.length;i++){
message += elements[i].firstChild.nodeValue+ "<br />";
}
select.innerHTML += message + "<br />";
}
else{
select.innerHTML += "Erreur de reception <br />";
}
// sleep de 5s et on repart
setTimeout("checkForMessages()", 5000);
}
}
function checkForCapteurs() {
var url = "http://192.168.0.10:8080/EMI/ModulePooling/capteurs";
initRequest(url);
req.onreadystatechange = processReqCapteurs;
req.open("GET", url, true);
req.send(null);
}
// callback
function processReqCapteurs() {
var select = window.document.getElementById("alarms");
if (req.readyState == 4) {
if (req.status == 200) {
select.innerHTML = "";
var message = "";
var elements = req.responseXML.getElementsByTagName("capteur");
for(var i=0;i<elements.length;i++){
message += "<tr><td>"+elements[i].firstChild.nodeValue+"</td></tr>";
}
select.innerHTML = "<table class=\"t2\"><tbody>" + message + "</tbody></table>";
}
else{
select.innerHTML += "Erreur de reception <br />";
}
// sleep de 5s et on repart
setTimeout("checkForCapteurs()", 5000);
}
}
function checkForCommandes() {
var url = "http://192.168.0.10:8080/EMI/ModulePooling/commandes";
initRequest(url);
req.onreadystatechange = processReqCommandes;
req.open("GET", url, true);
req.send(null);
}
// callback
function processReqCommandes() {
var select = window.document.getElementById("commandes");
if (req.readyState == 4) {
if (req.status == 200) {
select.innerHTML = "";
var message = "";
var elements = req.responseXML.getElementsByTagName("commande");
for(var i=0;i<elements.length;i++){
message += elements[i].firstChild.nodeValue+"<br />";
}
select.innerHTML += message + "<br />";
}
else{
select.innerHTML += "Erreur de reception <br />";
}
// sleep de 5s et on repart
setTimeout("checkForCommandes()", 5000);
}
} |
en debuggant avec Firebug je vois bien les HTTP GET qui sont fait sur ma servlet, les données sont bien recues par mon Javascript, là pas de soucis, mais le problème vient que mes fonctions JavaScript ne semblent pas être appellées systématiquement a l'ouverture de la page...
Quelque fois je n'ai que le DIV commande qui est mis à jour, quelque fois le DIV capteur + commande est mis à jour...
je sèche...qu'en pensez vous ? est ce que c'est une bonne pratique pour avoir une dynamique sur ma page ? pas trop gourmand au final ?
Merci,
Tiamat.