Chargement de la page alors que le PHP est en cours d'exécution
Ce que j'essaie de faire: Afficher un gif de chargement ou de texte... au moins afficher un écran noir avant et pendant le temps que le php est exécuté.
Ce que j'ai essayé.
J'ai testé à l'aide de la méthode flush () et je ne reçois rien jusqu'à ce que l'ensemble du processus php est fini. Je n'ai pas particulièrement que cette notion soit, mais je vais prendre quoi que ce soit.
Je suis envisage d'utiliser deux pages pour accomplir ce que le projet actuel est presque terminée et prendrait le temps de consolider la dispersion du code html/php.
Actuellement, je fais 3-simpleXML_load_file(), 1-include(), 1-file_get_contents()
J'ai de la fonction javascript de traçage des données à partir de l'une des simpleXML_Load_file()...
Im pour les pièces mobiles du code dans un autre fichier, mais c'est une tâche importante. Donc j'aimerai quelques conseils ou des suggestions sur la façon de procéder.
Si j'ai besoin de développer plus il suffit de demander!
Grâce,
JT
<html>
<head>
<?php
$lat = $_POST['Lat'];
$long = $_POST['Lon'];
$weather_hourly = simplexml_load_file('http:....lat='.$lat.'&lon='.$long.'');
?>
<script type="text/javascript">
<!--Plot function-->
$(function()
{
var d =
[
<?php
//Pulling in hourly data to plot temp vs time
$i=0;
$array=array();
while ($i<=100)
{
echo '['. (strtotime($weather_hourly->data->{'time-layout'}->{'start-valid-time'}[$i])*1000) .','.$weather_hourly->data->parameters->temperature->value[$i] .'],';
$value = $weather_hourly->data->parameters->temperature->value[$i];
array_push($array,$value);
$i++;
}
foreach ($array as $key => $value)
{
$value = (string) $value;
$min_sec_array[] = $value;
}
?>
</script>
</head>
<body>
<div id=graph>
</div>
</body
- J'ai ajouté un très peu de travail, mais vous obtenez l'idée exemple de code
Vous devez vous connecter pour publier un commentaire.
Le principal moyen que vous pouvez accomplir cela en utilisant AJAX et de plusieurs pages. Pour ce faire, la première page ne doit pas faire de la transformation, il suffit de mettre le chargement de l'image ici. Ensuite, faire une requête AJAX, et une fois que la demande est terminée, vous pouvez afficher les résultats sur la page ou rediriger vers une autre page.
Exemple:
Fichier 1 (jQuery doivent être incluses également), le mettre dans le corps avec le chargeur d'animation:
Mise à jour: Voici un exemple plus complet, basé sur votre code. Cela n'a pas été testé et a besoin d'avoir la bibliothèque jQuery inclus, mais ce devrait vous donner une bonne idée:
Fichier 1: file1.html
Fichier 2: file2.php
Je ne suis pas sûr si vous avez besoin d' $min_sec_array, mais j'ai eu ce retour que ainsi que les principales données que vous utilisiez avant.
Je recommanderais de ne pas le faire avec html et php si u attendre modifier la page après il est chargé. Parce que php est côté serveur de traitement, de sorte qu'il est exécuté avant que la page est envoyée à l'utilisateur. U besoin de Javascript. À l'aide de Javascript, activer u dynamiquement ajouter ou supprimer des éléments html à ou à partir de l'arborescence DOM après que la page a été envoyé à l'utilisateur. Il est exécuté par le navigateur d'utilisateurs.
Pour un départ plus facile je recommande jQuery, parce qu'il y a beaucoup de tutoriels sur de tels sujets.
JQuery
JQuery centre de formation
Un petit exemple:
HTML
ce ne sera rien de plus que le suivant jusqu'à maintenant:
adjonction fichier php
l'habitude de changer quoi que ce soit du html, mais l'ajout de javascript/Jquery à l'intérieur de l'HTML va être une sorte de connexion entre html statique et côté serveur php.
Cela va changer votre page pour afficher l'animation de chargement jusqu'à ce que le script php renvoie ses données, comme:
De sorte que vous pouvez configurer l'ensemble de la page en html, ajouter un peu de chargement gif, appeler plusieurs scripts php et de changer le contenu sans avoir à recharger la page elle-même.
C'est le genre de méchant solution à votre problème...
Mais cela peut fonctionner:
Vous de travail avec ceux -
au début, vous allez créer votre rotation ajax gif...
Ensuite, vous faites tout le traitement et le calcul de ce que vous voulez...
À la fin du traitement, juste l'écho d'un petit script qui fait une peau de votre gif...
Dépend de la précision de besoin, peut-être l'ajax peut être solution plus élégante.
ob_start(); echo '<img src="pics/loading.gif">'; ob_end_flush();
En réponse à votre conversation avec David Constantin ci-dessous, avez-vous essayez d'utiliser ob_flush()?
Je pense que vous n'avez pas de problème avec le rinçage de votre PHP sortie vers le navigateur, mais plus probablement à obtenir que le navigateur pour commencer le rendu de l'partielle de la sortie html. Malheureusement, le comportement du navigateur partielle html est un navigateur spécifique, donc si vous voulez quelque chose à travailler de la même quel que soit le navigateur, la solution AJAX suggéré dans d'autres réponses, c'est la meilleure façon d'aller.
Mais si vous n'aimez pas qui ajoute à la complexité d'une pleine solution AJAX, vous pouvez essayer de faire votre sortie html "beau" dans le sens de fournir à certains corps de sortie qui peut être mis en forme sans avoir besoin du reste de la sortie html. C'est là que votre exemple de code échoue: Il passe la plupart de son temps à la sortie de données dans une balise script à l'intérieur de l'en-tête html. Le navigateur n'a même jamais voit le début du corps jusqu'à ce que votre code PHP a pratiquement fini de s'exécuter. Si vous écrivez d'abord votre corps, puis ajouter la balise de script pour les données, vous donnez le navigateur quelque chose pour au moins essayer de rendre en attendant le script final pour être achevé.
J'ai trouvé le même problème (mais pas en PHP) discuté ici: Un Débordement de pile question "Quand les navigateurs commencent à rendre partiellement transmis HTML?" En particulier, de la accepté de répondre, il fournit un assez minime non-AJAX exemple, pour afficher et masquer un espace réservé, tandis que le fichier html n'a pas complètement chargé.
Je sais que c'est une vieille question, mais la réponse à cette page par rpnew est très clair et facile à adapter à vos besoins.
C'est une combinaison de l'AJAX et PHP.
La page HTML
PHPAjax.html
qui appelle le script PHP:L'arrière-plan Script PHP
PHPScript.php
:Enregistrez les deux fichiers dans le même répertoire. À partir de votre navigateur pour ouvrir le fichier HTML. Il montrera "Chargement..." pendant 10 secondes, puis vous verrez le message de changement de "je suis de Script PHP".