IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

fenetre d'attente 'chargement en cours'


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Points : 1 241
    Points
    1 241
    Par défaut fenetre d'attente 'chargement en cours'
    Bonjour,

    du tres habituel : je souhaite afficher une fenetre 'Chargement en cours' en attendant que la page soit correctement chargée (peut varier d'1 à plusieurs minutes => traitement d'un fichier en PHP coté serveur)

    J'avais deja fait fonctionner quelque chose comme cela
    pour cela, un 'DIV' qui s'affiche par dessus ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="loading">
    chargement en cours...
    </div>
    et j'enleve ce 'DIV' quand ma page est chargée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<body onload="loading_hide();">
    avec une fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function loading_hide() {
    	document.getElementById('loading').style.visibility='hidden';
    }

    mais cela ne marche pas...
    en fait, mon 'DIV' n'arrive pas avant que PHP ait fini de traiter le fichier (pourtant, le traitement du fichier n'est pas un script PHP qui se lancerait avant l'envoi de ma page).
    Du coup, ca fait un truc du genre 'attente 5 minutes', mon DIV arrive 1 seconde et disparait...

    J'ai fait quelques tests
    Si j'envoie suffisamment de texte avant le traitement du fichier en rajoutant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultrices mauris non dui varius feugia ....</p>
    alors mon DIV arrive bien au debut du traitement. Mais à partir du moment où j'envoie pas ou peu de texte avant le traitement du fichier, j'ai l'impression que le serveur Web attend que PHP ait fini de bosser pour envoyer la page, et du coup mon DIV d'attente ne sert à rien.


    j'espere que c'est clair.
    merci de vos lumieres

    PS : j'ai posté ici mais je sais pas trop comment ca va se gerer (PHP, Javascript ou autre chose ..)

  2. #2
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    Le code serveur est exécuté en premier lieu pour ensuite, en général, produire du code client. Le rendu (x)html est donc bien affiché après ton traitement php, si j'ai bien compris la problématique.

    Je te conseillerais de lancer le traitement php en ajax, le div d'attente n'aurais alors plus de problème d'affichage.

  3. #3
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Effectivement, comme le dit si bien franculo_caoulene, la meilleur solution, à mes yeux en tout cas, est d'utiliser un appel Ajax.

    Je ne sais pas quelles sont tes connaissances dans le domaines, mais c'est relativement aisé à comprendre. Moi même, je n'y avait jamais touché il y a deux mois, et maintenant que j'ai compris le principe, et que j'ai réussi à le mettre en place, je trouve que c'est un chouette système.

    Le principe pour ta page (j'ai du faire un truc semblable en utilisant asp), tu charges la page qui affichera tes données, en affichant le DIV loading, et un autre DIV(Data par exemple) qui contiendra les informations que tu est censée recevoir du serveur (un tableau peut être ).
    Une fois que ta page est chargée, tu fais appel à une fonction javascript (ou alors sur le OnLoad du body). Cette fonction appellera une page php (dans mon cas c'était une page asp), qui elle contiendra le code pour l'exécution et le traitement des données.
    Lorsque ta réponse sera construite, tu la retournera à la fonction javascript l'ayant appelée au départ, et dans la fonction, en jouant sur les "readyState", tu placera la réponse reçue dans ton DIV Data, cachera le DIV loading, et affichera le DIV Data.

    J'espère ne pas t'avoir embrouiller avec tout mon blabla, si c'est le cas, je m'en excuse.

    Si tu te poses encore des questions, je veux bien essayer de voir si je peux aider, mais je préviens, j'en touche pas une en php.

    Bon courage et bonne continuation...

    Richard.

  4. #4
    Membre éprouvé Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Points : 1 241
    Points
    1 241
    Par défaut
    merci pour vos réponses.

    J'avais lu des choses similaires et je pensais bien qu'il faudrait que je me mette à AJAX (je connais pas alors je vais faire comme Richard et m'y mettre, je connais PHP et Javascript donc j'espere m'en sortir!).

    Le truc, c'est que j'avais deja fait un intranet où ma page de chargement fonctionnait tres bien.
    Pourtant, le principe qu'explique franculo_caoulene est tout à fait cohérent, d'abord la page PHP coté serveur s'exécute, puis le résultat HTML est envoyé au client. Mais sur mon ancien développement, ma page était envoyée non terminée et mon message d'attente était OK...
    Bref, c'est du passé...

    merci pour vos conseils

  5. #5
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    tu peux voir les tutoriels de dvp pour ça : http://gael-donat.developpez.com/web/intro-ajax/

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    Par rapport à la problématique d'affichage du message d'attente, il existe peut-être une solution (plus ou moins élégante... plutôt moins d'ailleurs), qui consiste à envoyer au navigateur une partie des informations de la page en cours de chargement.

    Il s'agit de fonctions en php (il me semble que c'est ton cas ?) :
    http://fr.php.net/manual/fr/function.flush.php
    http://fr.php.net/manual/fr/function.ob-flush.php

    Par contre, comme le dit la documentation php ("Certaines versions de Microsoft Internet Explorer ne commenceront l'affichage de la page qu'après avoir reçu 256 octets d'affichage. Cela vous obligera à envoyer des espaces supplémentaires pour afficher la page"), il faut envoyer une chaine minimum de 256 caractères (1 octets = 1 caractères si je ne me trompe ?) pour que l'affichage se déclenche.

    Avec ces deux fonctions placées après ton "div d'attente" dans ta page php, le navigateur devrait afficher le div en attendant le chargement complet de ta page.

    C'est certes pas trés élégant comme solution, mais ça évite d'utiliser un traitement ajax uniquement pour de l'attente...

    A+

  7. #7
    Membre éprouvé Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Points : 1 241
    Points
    1 241
    Par défaut
    OK merci.

    En effet, un petit au bon endroit et c'est nickel !

    Bon, je sais pas quels mécanismes il y a derriere, et selon la description de la fonction sur php.net, y'a plusieurs cas qui pourraient être embetants selon les serveurs Web ...etc...

    C'est deja cool pour dépanner.
    il faudra de toute facon que je me penche sur AJAX.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/02/2008, 14h53
  2. Mettre "chargement en cours..."
    Par zorba49 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 03/09/2007, 17h59
  3. [AJAX] Affichage d'une icône chargement en cours
    Par krfa1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/03/2007, 22h15
  4. (débutant) aFfichage d'une fenetre en attente
    Par Asnidren dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 17/10/2006, 12h32
  5. fenetre sans bords pour attente chargement page
    Par k4eve dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/11/2004, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo