2010-09-29 16 views
5

XMLHttpRequest ile aşamalı veri indirme konusunda sorunlar yaşıyorum. Ben devlet 2 ve devletten 3 alıyorum. Devlet 3'ten sonra asla bir daha çağrılmaz. Neyi yanlış yapıyorum? Verileri temizlemem gereken bir yer okudum ama nasıl yaparım?XMLHttpRequest ilerici veri okuma çalışmıyor?

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

Ben readyState 3 olduğunda xmlHttp.responseText okumaya izin am: Burada

benim kodudur?

cevap

-4

kranu doğrudur, sen readyState çözümü sonra mesaj göndermektir http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

Bkz 3. olduğunda responseText okumaya izin yok zaman. Bir mesaj aldığınızda, başka bir XHR yapın. Bu, google (push?) Sunucu itme işlemini böyle yapar.

+0

Bağlantı için teşekkürler! Daha kesin bilgi ... Yani sıkışmış durumdayım :(Yukarıdaki örnek kodumdan verilen bir url bağlantısı bir radyo istasyonundan geliyor ve sürekli veri paketleri artı meta veriler var ... bende şu, meta veriler ... Bu veriyi ayrıştırmak istiyorum ... Yani Javascript ilerici indirmeyi sağlamaz. :( – Jona

+0

Aynı host içindeki radyo istasyonu mu yani? XHR'leri yapmaya başladığınızdan beri. bir iframe içine url ve iframe içeriğini aralıklarla kontrol edin Son olarak, sunucu üzerinde bir komut dosyası yazabilirsiniz radyon istasyonuna normal soketler kullanır ve json mesajlarını istemciye gönderirsiniz –

+0

Doğrudan javascript'ten yapamazsınız. Herhangi bir durumda, base64 kodlanmış olmayan ikili veri olduğu için. –

0

sorun bu segment ile en yüksektir:

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

Sebebi xmlRequest henüz tamamlanmadı olmasıdır (readyState = 4 Tamamlandığında). ResponseText'i zamanından önce istendiğinde, bir hatayı tetikledi ve kodu bitirme işlemini durdurdu.

Yani bunu değiştirecek:

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

İyi olan şey, veriye geldiği gibi ihtiyacım var. Hiç bitmeyeceği için bitene kadar bekleyemem, sürekli bir veri akışı. – Jona

+0

Peki, bu sürekli bir veri akışını nasıl uygulayacağınız değil. Yapacağınız şey, bittiğinde bir parça yüklemek, akışın bir sonraki bölümünü istemek. xmlHttp sürekli veri akışları için değildir. – Kranu