Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 16h18   #1
Membre du Club
 
Avatar de lightbulb
 
Inscription : septembre 2008
Messages : 80
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : septembre 2008
Messages : 80
Points : 44
Points : 44
Par défaut Barre de progression de chargement serveur

Bonjour à tous,
Pour vous placer dans le contexte je travail sur un module qui permet de créer des documents csv (excel) à partir d'une base de données, ces fichiers font plusieurs dizaines de milliers d'enregistrement.

Comme vous pouvez l'imaginer le temps de chargement est plutôt long et j'aimerai créer une barre de chargement assez évoluée qui afficherai le pourcentage de tuples traités.

Malheureusement je ne vois pas bien comment faire, mais voila ma première approche :
1- Le fichier de génération met à jour une variable de session dans la boucle de remplissage des fichiers
2- A partir de ma page de départ j'appelle ma page de génération en AJAX.
3- Au même moment je place un setInterval sur une autre fonction AJAX qui me ramène la valeur de la session sensée avoir été mise à jour par le serveur.

L'idée est que les sessions sont stockées sur le serveur, malheureusement le résultat est un ensemble de réponses vides jusqu'à ce que la page soit chargée et donc la liste terminée. A partir de ce moment la effectivement, la session contient les dernière valeurs de bouclage...

Contrairement à ce que je pensais les sessions ne sont mises à jour qu'une fois la page chargée, à mon grand regret...

Du coup je vois mal comment faire pour faire communiquer le client et le serveur pendant que celui-ci réalise une action.

Si vous avez des idées, je suis preneur !

Merci =)
lightbulb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 15h11   #2
Membre régulier
 
Inscription : juin 2008
Messages : 105
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 105
Points : 84
Points : 84
Salut l'idée de stocker l'état de ta requête dans une variable de session, il fallait y penser ....
Cependant, pour que ça marche, tu devrais créer une fonction ajax qui va appeler le script php pour modifier la valeur de la variable de session.

Alpha.
alpha232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 21h38   #3
Membre régulier
 
Inscription : juin 2008
Messages : 105
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 105
Points : 84
Points : 84
J'ai dit une bêtise dans le msg précédent. Effectivement, le code php est exécuté par le serveur en une fois.
Cependant, tu as une autre possibilité:
Il s'agit de fractionner ta procédure de création de fichier, en utilisant ajax.
A l'aide d'une procédure ajax, tu va chercher le nbre d'enregistrements que tu vas traiter.

Ensuite, si tu veux une progression par 5%, tu crée ton document csv en 20 fois, via ajax, et tu mets à jour à chaque pas de 5% ta barre de progression.

Donc si tu as 10.000 enregistrements, par ex, tu divise 10.000 par 20 cela fait 500 , et tu traites 500 enreg à la fois.

Je pense que cela pourrait fonctionner.

Alpha.
alpha232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 10h41   #4
Membre du Club
 
Avatar de lightbulb
 
Inscription : septembre 2008
Messages : 80
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : septembre 2008
Messages : 80
Points : 44
Points : 44
Salut, merci pour ta réponse !
Afin de valider le fait que php, asp créent le document en une seule fois j'ai tenté de faire un transfert d'information via un simple fichier texte qui est rempli et consulté de la même façon que je l'ai fait avec ma variable de session.

Suspens....

Rien n'y fait, tu as raison côté serveur le code est bien exécuté en une fois et les fichiers et variables ne sont disponibles qu'à la fin de cette exécution...

Effectivement un pas de 5% me semble raisonnable, je vais fractionner de la sorte !

Merci pour l'aide ! =)
lightbulb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 13h48   #5
Membre du Club
 
Avatar de lightbulb
 
Inscription : septembre 2008
Messages : 80
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : septembre 2008
Messages : 80
Points : 44
Points : 44
Nouvelle problématique,
J'ai divisé le traitement en n pas afin de permettre au serveur d'actualiser les variables de sessions qui sont récupérés par un script AJAX sous interval.

Le gros problème c'est que déjà je trouve pas ça propre. Une boucle de redirection plusieurs 10ènes de fois de suite, ça fait bricolo, mais en plus Firefox et chrome empêchent de faire plus de 20 redirections et IE je crois qu'à la première ça déconne O_o'

J'ai modifié la config de mon firefox pour qu'il puisse faire plus de redirection, ça marche impeccable, rien à redire. Malheureusement les personnes qui vont utiliser ce logiciel n'ont absolument aucune connaissance en informatique et je ne pense pas qu'ils aillent voir dans le about:config de firefox...

La question est donc comment faire autrement?

Il y a bien un moyen pour permettre au serveur de communiquer avec le client pendant un traitement quand même !!!

Merci
lightbulb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 17h29   #6
Membre habitué
 
Inscription : octobre 2009
Messages : 122
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 122
Points : 116
Points : 116
Je ne l'ai jamais fait, mais voilà une piste : utiliser Apache pour lancer une commande PHP

Ton premier appel Ajax lance un script coté serveur (ajax.php?id=123456) qui exécute en ligne de commande système un autre script (traitementServeur.php) avec un paramètre unique propre au client web (123456) qui permettra de l'identifier (je ne sais plus comment on passe des paramètres à un script en ligne de commande) php5 /var/www/[...]traitementServeur.php id=123465 etc.

traitementServeur.php met à jour une entrée dans un table de BDD identifiée par l'id et contenant le pourcentage de traitement. Comme il boucle pour créer ton CSV, il le connait.
Quand traitementServeur.php a fini, il flag l'enregistrement comme fini d'une manière ou d'une autre et écrit le fichier sur le disque dur

ajax.php?id=123456 regarde si il existe un enregistrement dans la table en donnant son ID : si il n'y a rien, il lance le traitement, si il y a quelque-chose il prend le pourcentage et le donne au navigateur. Si l'enregistrement est flagué comme fini, il retourne une autre valeur au javascript qui modifie le DOM pour proposer le fichier au téléchargement via une 3è méthode qui cherche le fichier depuis le disque dur
bewidia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 21h41   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
Citation:
Il y a bien un moyen pour permettre au serveur de communiquer avec le client pendant un traitement quand même !!!
A moins d'avoir un serveur qui gère le push, non, ce n'est pas possible.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h22.


 
 
 
 
Partenaires

Hébergement Web