[AJAX] Ajax et temps réel => Erreur : xhr.responseXML has no properties
Salut,
j'ai une appli à faire fonctionnant en temps réel.
C'est à dire qu'il a un script coté serveur donnant les infos en continu sur environ 1 minute.
Voici comment je le simule:
script "ajaxtr.php" ... avec un sleep( ) d'une seconde pour simuler le flot de données.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?
header('Content-Type: application/xml');
echo '<?xml version="1.0" encoding="ISO-8859-1"?>';
echo '<reponse>';
for ($n=0; $n<10;$n++)
{
echo '<line place="'.$n.'">line '.$n.'</line>';
flush();
sleep(1);
}
echo '</reponse>';
?> |
ce script tourne donc pendant 10 secondes.
Ensuite coté client j'ai ce script et je voudrais visualiser les infos au fur et à mesure qu'elles arrivent
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
| <html>
<head>
<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
<script type='text/JavaScript'>
var xhr = null;
function getXhr(){
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
}
// Node cleaner
function go(c){
if(!c.data.replace(/\s/g,''))
c.parentNode.removeChild(c);
}
function clean(d){
var bal=d.getElementsByTagName('*');
for(i=0;i<bal.length;i++){
a=bal[i].previousSibling;
if(a && a.nodeType==3)
go(a);
b=bal[i].nextSibling;
if(b && b.nodeType==3)
go(b);
}
return d;
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function gophp(){
getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
document.getElementById("etatDiv").innerHTML = "Etat: " + xhr.readyState;
if(xhr.readyState >= 3)
{
document.getElementById("textDiv").innerHTML = "*";
reponse = clean(xhr.responseXML.documentElement);
document.getElementById("textDiv").innerHTML = reponse.getElementsByTagName("line").length;
}
}
xhr.open("GET","ajaxtr.php",true);
xhr.send(null);
}
</script>
</head>
<body>
<input type='button' value='TEST TR' onclick='gophp()'><br>
<div id="textDiv"></div>
<div id="etatDiv"></div>
</body>
</html> |
Mais j'ai cette erreur:
Erreur : xhr.responseXML has no properties
Fichier source : http://127.0.0.1/ajax/
Ligne : 57
Normalement avec if(xhr.readyState >= 3), on devrait pouvoir commencer à afficher les infos dès qu'elles commencent à arriver ?
avez-vous une idée ?
merci