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

AJAX Discussion :

[AJAX] barre de progression ajax


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut [AJAX] barre de progression ajax
    Bonjour tout le monde,

    J'aurais besoin d'aide pour faire fonctionner une barre de progression AJAX. Essentiellement, je lis des données dans un fichier et je les insèrent dans la base de données. Comme ce traitement est long, je veux retourner quelque chose pour que l'utilisateur voit qu'il se passe quelque chose.

    Du côté client, tout va bien, j'ai trouvé comment faire fonctionner le tout ainsi que comment dire à la page HTML d'aller interroger le serveur à intervalle régulier. Je me suis basé sur ce site pour y arriver:

    http://www.redips.net/javascript/ajax-progress-bar/

    CEPENDANT... c'est du côté serveur que j'ai de la misère. J'arrive sans problème à calculer le pourcentage de progression en faisant une première passe dans mon fichier pour compter le nombre de lignes total. Ensuite c'est simplement de calculer le tout par rapport à la ligne où je suis rendu.

    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
     
     
    //Première passe pour lire le nombre de ligne au total
     
    $fichier = fopen($nomFichierProduit, 'r');
    $nombreLignesFichierProduit = 0;
    $numeroLigneFichierProduit = 0;
    $pourcent = 0;
     
    while ($ligne = fgets($fichier))
    {
    	$nombreLignesFichierProduit++;
    }
     
    fclose($fichier);
     
    //Deuxième passe où j'insère dans la BD
     
    $fichier = fopen($nomFichierProduit, 'r');
    while ($ligne = fgets($fichier))
    {
    	//requête d'insertion dans la BD
            $numeroLigneFichierProduit++;
            $pourcent = $numeroLigneFichierProduit / $nombreLignesFichierProduit * 100;
    }
    Le problème que j'ai c'est que si je fais un "echo" dans mon script, je me ramasse avec une réponse serveur totalement aberrante du style:

    <document>
    <progres>1</progres>
    <progres>2</progres>
    <progres>3</progres>
    <progres>4</progres>
    <progres>5</progres>
    <progres>6</progres>
    <progres>7</progres>
    <progres>8</progres>
    <progres>9</progres>
    <progres>10</progres>
    </document>

    And so on, comme on dit en anglais... C'est normal que ça fasse ça parce que le echo est toujours cumulatif, mais mon fichier fait pas loin de 20000 lignes alors vous imaginez la tête de ma réponse serveur quand je la demande par AJAX? À noter que ma méthode de calcul de pourcentage est correcte parce que je me retrouve quand même avec la bonne valeur... mais disons que dans ce cas-ci, l'historique ne m'intéresse pas, si je puis m'exprimer ainsi. Quelqu'un saurait comment éviter ce désagrément?

    Merci d'avance

    Osu

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    et si tu fais un print au lieu d'un echo tu as le même resultat ?

  3. #3
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    J'ai effectivement le même résultat . J'aurais pourtant cru que le plus compliqué aurait été de calculer la valeur... pas de la retourner à l'utilisateur.

  4. #4
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    Je ne vois pas dans ton code la traitement du serveur suite à une requête Ajax du client pour demander l'état d'avancement. D'ailleurs dans le code cité, aucun echo apparaît à moins que mes yeux ne me jouent des tours !

    Normalement le fonctionnement normal devrait être :
    1. Appel Ajax du client
    2. Calcul du pourcentage par le serveur (X %)
    3. Retour de la réponse avec un echo (echo 'X')

    Je ne comprends pas pourquoi tu inclurais ton echo dans une boucle ?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tu as essayé avec un flush et coté JavaScript un test sur le readyState 3 ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, 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
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Nounetmasque, j'ai effectivement malencontreusement omis de mettre le echo dans la boucle, mais tu as quand même compris ce que je voulais dire . Cependant, n'ayant pas réussi à trouver d'exemple bien expliqué sur Internet, je dois avouer que ma compréhension AJAX est relativement limitée. J'ai déjà essayé de faire un truc dans le genre côté serveur:

    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
     
    //Première passe pour lire le nombre de ligne au total
     
    $fichier = fopen($nomFichierProduit, 'r');
    $nombreLignesFichierProduit = 0;
    $numeroLigneFichierProduit = 0;
    $pourcent = 0;
     
    if (isset($_POST['fichier']))
    {
    while ($ligne = fgets($fichier))
    {
    	$nombreLignesFichierProduit++;
    }
     
    fclose($fichier);
     
    //Deuxième passe où j'insère dans la BD
     
    $fichier = fopen($nomFichierProduit, 'r');
    while ($ligne = fgets($fichier))
    {
    	//requête d'insertion dans la BD
            $numeroLigneFichierProduit++;
            $pourcent = $numeroLigneFichierProduit / $nombreLignesFichierProduit * 100;
    }
    }
    else
    {
    echo $pourcent;
    }
    Et évidemment, au niveau client, je lui passe simplement une requête vide une fois que la première requête pour commencer le traitement est envoyée, ce qui rend ce if fonctionnel. Cependant, tout ce que je reçois c'est

    0

    À tête reposée cependant, je réalise que la ligne $pourcent = 0; a peut-être quelque chose à y voir. En fait, je crois que je devrais peut-être remplacer le

    echo $pourcent

    par

    echo $numeroLigneFichierProduit / $nombreLignesFichierProduit * 100;

    Mais le problème reste le même parce que j'initialise mes variables à l'extérieur du "if". Donc $numeroLigneFichierProduit et $nombreLignesFichierProduit vont également être à 0. Comment dois-je faire pour ne pas perdre mon pourcentage d'un appel à l'autre? C'est précisément là que je bloque... et personne sur Internet ne semble vouloir expliquer clairement cette étape pourtant cruciale. Si je pouvais avoir une ébauche de code pour me donner une idée de comment procéder, ça serait grandement apprécié.

    Merci,

    Osu

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/02/2014, 12h27
  2. [AJAX] barre de progression & Ajax
    Par Bordak dans le forum AJAX
    Réponses: 3
    Dernier message: 09/03/2012, 14h27
  3. Réponses: 3
    Dernier message: 12/01/2010, 10h26
  4. [AJAX] Upload et barre de progression
    Par dremos dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/01/2009, 00h17
  5. [AJAX] Utilisation d'un barre de progression
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/03/2008, 16h22

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