2010-09-29 3 views
5

Je rencontre des problèmes avec XMLHttpRequest téléchargement de données progressives. Je reçois un état 2 et que l'état 3. Après l'état 3, il ne sera jamais appelé à nouveau. Qu'est-ce que je fais mal? J'ai lu quelque part que je dois vider les données, mais comment puis-je faire?XMLHttpRequest lire les données progressives ne fonctionne pas?

Voici mon code:

var xmlHttp = new XMLHttpRequest(); 
// try to connect to the server 
try 
{ 
    // initiate server request 
    xmlHttp.open("GET", "http://208.43.121.133:8164/;", true); 
    xmlHttp.setRequestHeader("Icy-Metadata", "1"); 
    xmlHttp.onreadystatechange = function() 
    { 
    alert("status: "+xmlHttp.status); 
    alert("State: "+xmlHttp.readyState); 

    if (xmlHttp.readyState == 3) 
    { 
     alert(xmlHttp.responseText); 
    } 
    }; 
    xmlHttp.send(null); 
} 
// display an error in case of failure 
catch (e) 
{ 
    alert("Can't connect to server:\n" + e.toString()); 
} 

je suis autorisé à lire le xmlHttp.responseText quand readyState est 3?

Répondre

-4

Kranu est correct, vous n'êtes pas autorisé à lire responseText quand readyState est 3. Voir http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

La solution est d'envoyer un message à un temps. Lorsque vous recevez un message, faites simplement un autre XHR. C'est ainsi que google (fait?) Pousse le serveur.

+0

Merci pour le lien! Plus d'informations précises ... Donc je suis bloqué :(Le lien url donné de mon exemple de code ci-dessus provient d'une station de radio et il y a des paquets de données en continu plus des métadonnées ... c'est ce que je cherche, les métadonnées ... Je veux analyser ces données ... Alors que Javascript ne fournit pas de téléchargement progressif. :( – Jona

+0

Est-ce que la station de radio est dans le même hôte? Je suppose que c'est parce que vous faites des XHR. l'url dans un iframe et vérifier le contenu de l'iframe à intervalles.Enfin, vous pouvez écrire un script sur le serveur utilise des sockets réguliers à la station de radion et les messages json de sortie à votre client –

+0

Vous ne pouviez pas le faire directement à partir de javascript dans tous les cas, car ce sont des données binaires qui ne sont pas codées en base64 –

0

Le problème est plus probable avec ce segment:

if(xmlHttp.readyState == 3) { 
     alert(xmlHttp.responseText); 
    } 

La raison en est que le XMLRequest est pas encore terminée (readyState = 4 lorsque vous avez terminé). Lorsque vous avez demandé le responseText prématurément, cela a déclenché une erreur et a empêché le code de finir.

Vous changeriez à:

if(xmlHttp.readyState == 4) { 
    alert(xmlHttp.responseText); 
} 
+0

Eh bien, j'ai besoin des données à mesure qu'elles arrivent. Je ne peux pas attendre que ce soit fait car cela ne sera jamais fait, c'est un flux de données continu. – Jona

+0

Eh bien, ce n'est pas ainsi que vous mettriez en œuvre un flux de données continu. Ce que vous feriez, c'est charger une partie, quand c'est fait, demander la partie suivante du flux. xmlHttp n'est pas pour les flux de données continus. – Kranu

Questions connexes