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 :

[AJAX] Construction d'un preloader pendant l'ex�cution d'un php


Sujet :

JavaScript

  1. #1
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut [AJAX] Construction d'un preloader pendant l'ex�cution d'un php
    Bonjour � tous,


    Je ne sais pas si je suis dans la bonne section, vu que ma question porte sur la meilleure technique � adopter... J'ai cr�e un petit script d'envoi de newsletter et je voudrais afficher un message d'attente, une barre de progression...pendant que PHP fait le boulot et envoie les vagues de mails. Ceci au lieu de la page toute blanche. J'ai lu plein de tutos, essay� des scripts JS, DHTML, AJAX...mais rien ne m'a satisfait puisque en g�n�rale le message "envoi en cours, merci de patienter" s'affiche en m�me temps que le r�sultat du traitement....donc trop tard.

    Quelqu'un a une id�e et peut me dire vers quoi je pourrais creuser ?
    Merci � lui.
    Bonne journ�e.

  2. #2
    Membre Expert
    Avatar de ryan
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Billets dans le blog
    1
    Par d�faut
    Yop!

    Si tes adresses email sont dans une BDD, c'est assez facile.

    Dans ta page, tu boucles sur le r�sultat de ton query qui comporte donc toutes tes adresses email. Pour chaque adresse, tu �cris un formulaire avec des champs cach�s qui contiennent l'adresse email et les autres param�tre (l'index du mail envoy�, le nombre total de mail, le titre et le body de l'email, par exemple). La target du formulaire est une iframe. Dans cette iframe,tu as le code pour envoyer ta news letter, et en connaissant le nombre total de mail et l'index du mail couramment envoy�, tu peux construire une image qui r�fl�te le % de mail envoy�s par rapport au total de mails � envoyer.

  3. #3
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Merci de cette suggestion...que je vais tenter, m�me si �a reste un peu flou...j'ai notamment peur que cette petite manip allourdisse consid�rablement le script...

    Bonne journ�e.

  4. #4
    R�dacteur
    Avatar de marcha
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2003
    Messages
    1 571
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 571
    Par d�faut
    Salut,

    La technique que j'utilise est la suivante:

    une page pour le traitement d'envoi global, tel que tu l'a d�j� fait.
    dans cette page tu met � jour un compteur dans la base de donn�e
    dans une table pr�vue pour �a, ce compteur indique le pourcentage
    effectu� par exemple.

    dans une autre page php tu lis juste ce compteur.

    enfin, dans ta page d'envoi, tu lance d'abord une requ�te ajax qui
    d�marre le processus d'envoi, puis tu lance des requ�tes r�guli�res
    (1 ou 2 fois par seconde) vers la 2�me page pour connaitre la progression.

  5. #5
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Merci �galement de ta suggestion.

    enfin, dans ta page d'envoi, tu lance d'abord une requ�te ajax
    Ca il va falloir que je me documente serieusement parce que je suis � 0.


    Une piste de plus � creuser...

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut une autre voie ?
    Si jamais dans ton cas la progression exacte n'est pas n�cessaire (les n% accomplis), il y a �ventuellement une solution bien plus rudimentaire que les excellentes solutions d�j� propos�es, qui serait la suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    var xhr = getXhr(); // voir note ci-dessous*
    xhr.open("GET",mesDonnees.xml?monParam=uneValeur,true);
    xhr.onReadyState = function()
    {
       if (xhr.readyState == 1)
       {
          // ici gestion de l'attente, exemple (minimaliste) :
          var zoneAffichable = document.getElementById('idElementChoisiPourAfficher');
          zoneAffichable.value = "Veuillez patienter...traitement en cours"
       }
       else if (xhr.readyState == 4 && xhr.status == 200)
       {
          // ici code de succès de ton traitement
          // et effacement du message d'attente
       }
    }
    xhr.send(null);
    *J'ose esp�rer que tu t'es �crit/r�cup�r� une petite m�thode getXhr() qui cr�e un objet XMLHTTPRequest selon le navigateur, bien entendu

  7. #7
    Membre Expert
    Avatar de ryan
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Billets dans le blog
    1
    Par d�faut
    Yop!

    Citation Envoy� par renaud26 Voir le message
    Merci de cette suggestion...que je vais tenter, m�me si �a reste un peu flou...
    Je vais essayer de pr�ciser les choses...

    Premi�re page:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <html>
    <body>
    <?php
     
    // on suppose que tu as effectué la connexion à la BDD
    $query = "SELECT email FROM mytable";
    $rs = mysql_query($query);
     
    // le nb total d'emails à envoyer
    $total = mysql_num_rows($rs);
     
    // on initialise un compteur
    $count = 0;
     
    while ($row = mysql_fetch_assoc($rs)) 
    {
      $count = $count + 1;
      echo "<form name='myform' action='sendmail.php' method=post target='myframe'>";
      echo "<input type=hidden name='total' value='" . $total . "'>";  
      echo "<input type=hidden name='count' value='" . $count . "'>";
      echo "<input type=hidden name='email' value='" . $row["email"] . "'>";  
      echo "<input type=hidden name='titre' value='ceci est le titre du mail'>";  
      echo "<input type=hidden name='body' value='ceci est le body du mail'>";    
      echo "</form>"; 
      echo "<script>document.forms.myform.submit();</script>"; 
    }
    ?>
    <iframe name="myframe" height=100 width=400>
    </iframe>
    </body>
    </html>
    La page sendmail.php

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <html>
    <body>
    <?php
     
     // progression de la tâche en mode texte
     
     echo "Sending email " . $_POST["count"]  . " on " . $_POST["total"];
     
     // ensuite tu places le code qui expédie l'email....
     
     ...
     
    ?>
    </body>
    </html>
    Pas test�, et comme il se fait tard, il se peut qu'il y ait des erreurs grossi�res, mais le principe est l�.

  8. #8
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    J'ose esp�rer que tu t'es �crit/r�cup�r� une petite m�thode getXhr() qui cr�e un objet XMLHTTPRequest selon le navigateur, bien entendu
    Euh....� vrai dire...non.
    Mais je vais plonger dans les tutos AJAX...promis !

    A Ryan : oui, merci, �a me para�t tout � fait clair, maintenant. Je vais tester ce syst�me imm�diatement.

    Bonne journ�e � tous...et courage � ceux qui sont sous la neige...

  9. #9
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Citation Envoy� par renaud26 Voir le message
    Euh....� vrai dire...non.
    Exemple tr�s classique :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function getXhr()
    {
       if(window.XMLHttpRequest) // Firefox et autres
          var getXmlHttpRequest = new XMLHttpRequest();
       else if(window.ActiveXObject)
       { // Internet Explorer
          try
          {
             getXmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
          }
          catch(e)
          {
             getXmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
          }
       }
       else
       { // XMLHttpRequest non supporté par le navigateur
          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
          getXmlHttpRequest = false;
       }
       return getXmlHttpRequest;
    }
    Citation Envoy� par renaud26 Voir le message
    ...et courage � ceux qui sont sous la neige...
    Merci bien du fin fond de la Lorraine

Discussions similaires

  1. �a rentre pas dans la boucle pendant l'ex�cution
    Par djouahra.karim1 dans le forum Bases de donn�es
    R�ponses: 9
    Dernier message: 15/01/2005, 15h41
  2. Emp�cher la copie d'un prog pendant son ex�cution
    Par JuanLopez1966 dans le forum Assembleur
    R�ponses: 3
    Dernier message: 09/09/2004, 19h49
  3. Cr�er une fonction math�matique pendant l'ex�cution
    Par zeprogrameur dans le forum Langage
    R�ponses: 5
    Dernier message: 09/07/2004, 11h36
  4. Published property d'un compo conserv�es pendant l'ex�cution
    Par bobby-b dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 04/09/2003, 10h15

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