2010-03-26 3 views
1

J'ai un script qui s'exécute pendant un certain temps et j'utilise ob_start() pour mettre en tampon la sortie et imprimer le résultat après l'exécution du script.Comment afficher l'animation de chargement avant d'imprimer le contenu du tampon depuis ob_start()?

J'ai besoin d'afficher une animation de chargement pendant que le script s'exécute et de le remplacer par la sortie à la fin de l'exécution du script.

Je sais que cela peut être fait très bien avec JavaScript et jQuery. Je me demandais juste si cela peut être fait en utilisant PHP seul?

Y at-il une bibliothèque qui permet à PHP de faire cela?

Répondre

2

Malheureusement, vous ne pouvez pas utiliser PHP (qui fonctionne sur le serveur) pour modifier le code HTML qui a déjà été envoyé au client. En d'autres termes, vous devrez probablement utiliser JavaScript pour réaliser ce que vous voulez faire.

+0

Je suppose que je peux appeler une fonction javascript juste avant d'imprimer la sortie à l'écran ....? – SpikETidE

+0

Non, JavaScript est exécuté sur le client, vous devrez donc imprimer la page de chargement, puis utiliser du JavaScript pour faire une requête AJAX et modifier le code HTML avec JS/rediriger vers la page avec les données. – mdm

+0

@SpikeETidE Vous pouvez imprimer du Javascript qui cache l'animation de chargement juste avant d'imprimer les résultats. – Yacoby

0

Vous ne pouvez pas remplacer le contenu que vous avez déjà envoyé avec seulement PHP. Vous pouvez seulement y ajouter. Je ne vois aucun moyen pratique de faire ce que vous voulez faire avec PHP seul.

+0

Je n'essaie pas de modifier le contenu déjà envoyé .. J'essaie juste de supprimer l'animation de chargement qui sera dans une div séparée juste avant d'imprimer la sortie .... – SpikETidE

+0

@SpikETidE L'animation de chargement est le contenu déjà envoyé. Le retirer compte comme un contenu modifiable. –

0

Vous pourrait essayer quelque chose comme ceci:

<!Doctype> 
<title>hide later</title> 
<p>Wait 3 seconds</p> 
<?php 
ob_start(); 
sleep(3); 
?> 
Done! 
<style>p{display:none}</style> 
<?php 
ob_end_flush(); 

Mais ... il fonctionne dans Opera uniquement. :) IE, WebKit et Gecko attendront le dernier bit avant de rendre quoi que ce soit. Oh, et c'est un balisage invalide.

Questions connexes