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] Appel asynchrone avec barre de progression


Sujet :

AJAX

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut [AJAX] Appel asynchrone avec barre de progression
    Bonjour à tous,

    J'aimerais faire un service PHP, appelable en JS de manière asynchrone, et afficher une barre de progression de l'opération en cours.

    Comment m'y prendre ?

    Est-ce que c'est le même service PHP qui renvoie des données régulièrement à JS ? Ou dois-je stocker, par exemple en session, des informations d'avancement consultables via un autre service PHP et faire des appels JS régulièrement pour accéder à ces données ?

    Pour le moment je cherche juste à connaître le bon design à utiliser, après pour le code c'est pas un soucis, mais si vous avez des exemples ce serait cool

    Bonne journée à vous,

    A bientôt

  2. #2
    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
    Ah tiens, ça me rappelle un use case sur le readyState 3 que j'avais fait fut un temps.
    Le principe : envoyer à l'aide de flush séparés de sleep des morceaux de contenu et les traiter.
    Le code :
    Code html : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <!DOCTYPE HTML>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<style type="text/css">
                    #resultat{
                            border: 1px solid black;
                            padding: 10px;
                            background-color: #EEEEEE;
                            min-height: 1em;
                            margin-top: 0;
                    }
            </style>
    	<title>readyState 3</title>
    	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    </head>
    <body>
    	<p><button id="lancer">Lancer la requête (synchrone)</button><button id="lancer2">Lancer la requête (asynchrone)</button></p>
    	<div id="readystate"></div>
    	<p id="resultat"></p>
     
    		<h3></h3>
    	<div id="responseText"></div>
    	<script>
                    var elem = document.getElementById('lancer'),
                            elem2 = document.getElementById('lancer2'),
                            result = document.getElementById('resultat'),
                            ready = document.getElementById('readystate');
                    elem.onclick = requete;
                    elem2.onclick = requeteFalse;
                    function requeteFalse(){
                            requete(false);
                    }
                    function requete(isAsync){
                            var async = !!isAsync,
                                    currentState;
                            elem.disabled = true;
                            elem2.disabled = true;
                            result.innerHTML = '';
                            ready.innerHTML = '';
                            var xhr = new XMLHttpRequest();
                            ready.innerHTML += 'readyState : ' + xhr.readyState + '<br />';
                            xhr.open('post','ajax.php',async);
                            xhr.onreadystatechange = function(){
                                    console.info('readyState : ' + xhr.readyState);
                                    if(xhr.readyState !== currentState){
                                            currentState = xhr.readyState;
                                            ready.innerHTML += 'readyState : ' + currentState + '<br />';
                                    }
                                    if(xhr.readyState == 3){
                                            result.innerHTML = xhr.responseText;
                                    }
                                    if(xhr.readyState == 4){
                                            elem.disabled = false;
                                            elem2.disabled = false;
                                            document.getElementById('responseText').innerHTML = xhr.responseText;
                                    }
                            };
                            xhr.send(null);
                    }
            </script>
    </body>
    </html>
    Code php : 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
    <?php
    	sleep(1);
    	echo 'Début';
        ob_flush(); 
    	flush();
    	sleep(1);
    	echo '<br />';
    	for($i = 0; $i < 20; $i++){
    		echo '.';
    		ob_flush(); 
    		flush();
    		usleep(100000);
    	}
    	sleep(1);
    	echo '<br />Fin';
    ?>
    Un exemple en ligne.
    Tu peux t'en inspirer pour ta barre de progression.
    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

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok je vois le principe.

    Pour info, le bouton "synchrone" lance la requête en asynchrone, et inversement

    Merci beaucoup pour le tuyau,

    A bientôt

  4. #4
    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


    Bien vu, pourtant, c'est pas faute d'avoir cliqué dessus je ne sais combien de fois et j'avais même pas fait gaffe !
    C'est corrigé.

    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

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

Discussions similaires

  1. Copier/coller avec barre de progression
    Par TicTac75 dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/06/2015, 16h41
  2. Réponses: 2
    Dernier message: 11/04/2013, 16h04
  3. [Typo3] Uploads avec barre de progression
    Par Onyrik dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 11/03/2008, 17h31
  4. [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
  5. Réponses: 2
    Dernier message: 27/04/2007, 11h12

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