2012-02-15 1 views
5

Je veux accéder aux données AJAX avant que la demande est terminée, mettre en œuvre efficacement le streaming un peu comme ceci:données de diffusion en continu sur ajax

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

En ce moment j'ai un truc php pour casser la demande en morceaux plus petits , mais je préférerais tout prendre d'un coup. Quelle est la meilleure façon de le faire (je me soucie seulement de Chrome et Firefox).

+0

grande question, je pense que cela fonctionne avec les spécifications HTML5, mais je vais essayer de trouver –

+0

quel type de données sont envoyées par PHP? –

Répondre

6

Eh bien, en commençant par un gestionnaire de PHP comme ceci:

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

et javascript comme ceci:

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

je reçois cette console:

11183 
137415984 
1311572876 
1313769728 

donc, ça marche .... je pense que vous pouvez comprendre le reste :)

+0

Génial, merci! Je pensais que j'avais déjà utilisé responseText au cours de la requête et le navigateur m'a réprimandé. Je suppose que le progrès est tout ce dont j'avais besoin. (J'envoie des données binaires, mais il s'agit d'une chaîne). – Chris

2

Il vaut mieux utiliser WebSockets pour faire ce genre de chose et avoir la solution de repli appropriée pour les anciens navigateurs (par exemple sous la forme d'un interrogation longue AJAX).

Depuis que vous utilisez PHP une recherche rapide google a révélé ce projet - http://code.google.com/p/phpwebsocket/ qui pourrait fournir un moyen simple de le faire. Je ne sais pas s'il y a un repli vers d'autres technologies si le navigateur ne supporte pas les websockets mais si ce n'est pas le cas, vous pourriez mettre socket.io-client par-dessus et utiliser le projet phpwebsocket pour fournir votre couche serveur .

+0

Cool idée sur les prises! Je ne savais même pas qu'ils existaient en Javascript. Cependant, je pense que ajax_request.onprogress est tout ce dont j'ai besoin pour mes fins. – Chris

Questions connexes