2012-02-15 15 views
5

voglio accedere ai dati AJAX prima della richiesta è terminata, in modo efficace per implementare in streaming un po 'come questo:dati in streaming oltre ajax

ajax_request.send(); 
interval = setInterval(function() { 
    continueParsing(ajax_request.responseText); 
    if (download_complete) 
     clearInterval(interval); 
}, 64); 

In questo momento ho un thingy php per rompere la richiesta fino in porzioni più piccole , ma preferisco prendere tutto in una volta. Qual è il modo migliore per farlo (mi interessa solo di Chrome e Firefox).

+0

ottima domanda, penso che funzioni con le specifiche HTML5, ma cercherò sicuramente di scoprire –

+0

che tipo di dati vengono inviati da PHP? –

risposta

6

Ebbene, a partire da un gestore PHP come questo:

$content = file_get_contents('http://pplware.sapo.pt/feed/'); 
for($i = 0; $i < 10; $i++){ 
    $content .= $content; 
} 
echo $content; 

e un javascript come questo:

var client = new XMLHttpRequest(); 
client.open('get', 'ajax.php'); 
client.send(); 
client.onprogress = function(){ 
    console.log(this.responseText.length);    
} 

ottengo questa console:

11183 
137415984 
1311572876 
1313769728 

così, funziona .... penso che tu possa capire il resto :)

+0

Fantastico, grazie! Anche se avevo usato responseText prima durante la richiesta e il browser mi ha rimproverato. Suppongo che onprogress sia tutto ciò di cui avevo bisogno. (Sto inviando dati binari, ma entra come una stringa). – Chris

2

È consigliabile utilizzare WebSockets per eseguire questo tipo di operazioni e disporre del fallback appropriato per i browser meno recenti (ad esempio sotto forma di polling lungo AJAX).

Dal momento che si sta utilizzando PHP una breve ricerca su Google alzato questo progetto - http://code.google.com/p/phpwebsocket/ che potrebbe fornire un modo semplice per farlo. Non so se ha un ritorno alle altre tecnologie se il browser non supporta i websocket ma se così non fosse potresti mettere socket.io-client sopra e usare semplicemente il progetto phpwebsocket per fornire il tuo livello server .

+0

Fantastica idea di prese! Non sapevo nemmeno che esistessero in Javascript. Tuttavia, penso che ajax_request.onprogress è tutto ciò di cui ho bisogno per i miei scopi. – Chris