2010-03-27 1 views
2

J'ai besoin d'afficher sur ma page une liste d'enregistrements tirés d'une table. Ajax fonctionne bien (j'interroge la base de données et place toutes les données dans un sur la page principale) mais si j'ai beaucoup d'enregistrements (disons 500+) ça va se bloquer jusqu'à ce que les données soient complètement chargées, PUIS ça sera renvoyé à la page et correctement affiché. Je voudrais pouvoir afficher les enregistrements sur la page tout en les obtenant, au lieu d'être obligé d'attendre jusqu'à la fin. J'essaye avec flush(); à l'intérieur de la page distante (ajax) mais il attend toujours jusqu'à ce que les données complètes soient chargées.Puis-je générer/vider les données à l'écran lors du traitement de la page ajax?

C'est ce que j'ai actuellement dans la page ajax:

Au début:

@apache_setenv('no-gzip', 1); 
@ini_set('zlib.output_compression', 0); 
@ini_set('implicit_flush', 1); 
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

Ensuite, chaque fois que j'ai un appel d'écho:

ob_flush(); 

Maintenant, si je charge la page ajax seule ... elle liste les enregistrements en les lisant depuis la base de données. Mais si j'appelle la même page via Ajax, il va se bloquer et envoyer toutes les données à la fois.

Une idée?

C'est la fonction que j'utilise pour obtenir le contenu ajax (« id » est la cible, « url » se réfère à la page ajax qui exécute la requête de base de données à la liste des enregistrements):

function ajax(id,url) { 
xmlhttp=new XMLHttpRequest(); 
xmlhttp.open("GET",url,false); 
xmlhttp.send(null); 
document.getElementById(id).innerHTML = parseScript(xmlhttp.responseText); 
} 
+0

essayer flush(); avec ob_flush(); mais Ajax n'est pas en streaming de toute façon, vous devez attendre que la page se termine charger ... – Marcin

+0

Hmmm quelqu'un a réussi à obtenir ce dont j'ai besoin, jetez un oeil à cet exemple: http://ajaxify.com/run/streaming mais je don pas le truc ... – Bee

Répondre

3

Essentiellement Vous devrez créer une boucle avec le code côté serveur qui génère un appel de fonction Javascript pour mettre à jour le résultat. Ces demandes doivent être effectuées dans une connexion HTTP parallèle.

Plus de détails est disponible ici: http://ajaxpatterns.org/HTTP_Streaming

Questions connexes