2010-09-29 15 views
5

Sto riscontrando problemi con XMLHttpRequest che scarica i dati progressivi. Ottengo uno stato 2 e uno stato 3. Dopo lo stato 3 non viene mai richiamato. Che cosa sto facendo di sbagliato? Ho letto da qualche parte che ho bisogno di scaricare i dati, ma come faccio?XMLHttpRequest legge dati progressivi non funzionanti?

Ecco il mio codice:

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

ho il permesso di leggere il xmlHttp.responseText quando readyState è 3?

risposta

-4

Kranu è corretto, non ti è permesso di leggere responseText quando readyState è 3. Vedere http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

La soluzione è quella di inviare un messaggio ad un tempo. Quando ricevi un messaggio, fai un altro XHR. Ecco come google fa (fatto?) Server push.

+0

Grazie per il link! Informazioni più precise ... Quindi sono bloccato :(Il link url dato dal mio codice di esempio sopra è da una stazione radio e ci sono pacchetti di dati continui più metadati ... questo è quello che cerco, i metadati ... Voglio analizzare questi dati ... Quindi Javascript non fornisce il download progressivo. :( – Jona

+0

È la stazione radio all'interno dello stesso host? Sto supponendo che è da quando stai facendo XHRs. L'alternativa è caricare l'url in un iframe e controlla il contenuto dell'iframe a intervalli.Infine, potresti scrivere uno script sul server usa socket regolari per la stazione di radion e mostra messaggi json al tuo client. –

+0

Non potresti farlo direttamente da javascript in ogni caso dal momento che si tratta di dati binari che non sono codificati in Base64 –

0

Il problema è molto probabilmente con questo segmento:

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

Il motivo è che il XMLRequest non è ancora completa (readyState = 4 quando completo). Quando hai richiesto il responseText prematuramente, ha generato un errore e ha impedito il completamento del codice.

Così si avrebbe modificarla in:

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

Beh, il fatto è che ho bisogno dei dati appena entrati. Non vedo l'ora che sia fatto perché non sarà mai fatto, è un flusso di dati continuo. – Jona

+0

Beh, non è così che si dovrebbe implementare un flusso di dati continuo. Quello che dovresti fare è caricare una parte, al termine, richiedere la parte successiva del flusso. xmlHttp non è per flussi di dati continui. – Kranu