2010-09-29 9 views
5

Tengo problemas con XMLHttpRequest para descargar datos progresivos. Obtengo un estado 2 y luego un estado 3. Después del estado 3, nunca se vuelve a llamar. ¿Qué estoy haciendo mal? Leí en algún lado que necesito limpiar los datos, pero ¿cómo hago eso?XMLHttpRequest leer datos progresivos no funciona?

Aquí está mi código:

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()); 
} 

¿Se me permite leer el xmlHttp.responseText cuando readyState es 3?

Respuesta

-4

Kranu es correcta, no se le permite leer responseText cuando readyState es 3. Ver http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

La solución es enviar un mensaje a una hora. Cuando recibe un mensaje, simplemente haga otro XHR. Así es como google lo hace (¿no?) El servidor push.

+0

¡Gracias por el enlace! Información más precisa ... Así que estoy atascado :(El enlace url dado desde mi código de muestra anterior es de una estación de radio y hay paquetes de datos continuos más metadatos ... eso es lo que busco, los metadatos ... Quiero analizar estos datos ... Así que Javascript NO proporciona descargas progresivas. :( – Jona

+0

¿La estación de radio está dentro del mismo host? Supongo que es porque estás haciendo XHRs. La alternativa es cargar la url en un iframe y verifique el contenido del iframe a intervalos. Por último, puede escribir un script en el servidor que use sockets regulares en la estación de radion y emite mensajes json a su cliente. –

+0

No podría hacerlo directamente desde javascript en cualquier caso, dado que son datos binarios que no están codificados en base64. –

0

El problema es más probable con este segmento:

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

La razón es que el XMLRequest todavía no está completo (readyState = 4 cuando completa). Cuando solicitó el texto de respuesta prematuramente, desencadenó un error e impidió que el código finalizara.

Así que iba a cambiar a:

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

Bueno, la cosa es que necesito los datos tal como aparecen. No puedo esperar hasta que se complete, ya que nunca se terminará, es un flujo continuo de datos. – Jona

+0

Bueno, esa no es la forma en que implementaría una secuencia de datos continua. Lo que harías es cargar una parte, cuando haya terminado, solicita la siguiente parte de la transmisión. xmlHttp no es para flujos de datos continuos. – Kranu

Cuestiones relacionadas