2012-02-15 20 views
5

Quiero tener acceso a los datos AJAX antes de que la solicitud ha terminado, para aplicar eficazmente la transmisión de algo así como esto:datos de streaming a través de ajax

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

En este momento tengo una cosita php para romper la solicitud en trozos más pequeños , pero preferiría tomarlo todo de una vez. ¿Cuál es la mejor manera de hacer esto? (Solo me importan Chrome y Firefox).

+0

gran pregunta, creo que esto funciona con las especificaciones de HTML5, pero seguro voy a tratar de averiguar –

+0

qué tipo de datos se envían desde PHP? –

Respuesta

6

Bueno, a partir de un controlador de PHP como esto:

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

y un javascript de esta manera:

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

me sale esta consola:

11183 
137415984 
1311572876 
1313769728 

así, funciona .... creo que puedes descubrir el resto :)

+0

¡Increíble, gracias! Pensé que había usado responseText antes durante la solicitud y el navegador me reprendió. Supongo que el progreso es todo lo que necesitaba. (Estoy enviando datos binarios, pero aparece como una cadena). – Chris

2

Lo mejor que hace es usar WebSockets para hacer este tipo de cosas y tiene el respaldo apropiado para los navegadores antiguos (por ejemplo, en forma de larga encuesta AJAX).

Dado que está utilizando PHP, una búsqueda rápida en Google encontró este proyecto - http://code.google.com/p/phpwebsocket/ que podría proporcionarle una forma sencilla de hacerlo. No sé si tiene alguna desventaja con otras tecnologías si el navegador no admite websockets, pero si no es así, puede poner socket.io-client en la parte superior y simplemente usar el proyecto phpwebsocket para proporcionar su capa de servidor .

+0

¡Buena idea sobre los enchufes! Ni siquiera sabía que existían en Javascript. Sin embargo, creo que ajax_request.onprogress es todo lo que necesito para mis propósitos. – Chris

Cuestiones relacionadas