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 :

[XMLHttpRequest] Interactivité client/serveur


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [XMLHttpRequest] Interactivité client/serveur
    Bonjour à tous !

    Voilà ma question, voilà mon sujet.

    j'aimerai lancer un script san srechargement de la page du côté client, en utilisant XMLHTTPRequest.

    Je voudrais récupérer les informations de manières intercative (afin de faire une barre de progression dans mon navigateur.

    Mon script client lance la requete 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
    19
    20
    21
     
    function Calculate(id,month)
    {
     
          if (window.ActiveXObject){xhr_object=new ActiveXObject("Microsoft.XMLHTTP");}
                else{alert("your browser doesn't allow ActiveX Object");return;}
     
                var data="CGISESSID="+id+"&MONTH="+month+"";
                var filename="./X400_forfait_xml.pl";
                xhr_object.open("POST",filename,true);
                xhr_object.onreadystatechange = function() {   
                                                            if(xhr_object.readyState == 4) 
                                                            {   
                                                                  var xmlres = xhr_object.responseText;   
                                                                  document.getElementById('RESDIV').innerHTML=xmlres;
                                                            }
                                                      }     
          xhr_object.send(data);
     
     
    }
    le script perl va chercher tous les fichiers qui ont été créé pour le mois en argument (month) et sort le nombre de carctères dans chacun des fichiers.

    Ce que j'aimerai, je ne sais pas si c'est possible, c'ets obtenir une réponse de mon script à chaque fois qu'un fichier a été analysé afin de faire une barre de progression du côté client.

    Est-ce possible ??

    Si oui, Sans détailler, est-ce que ma fonction Calculate suffit ? Je ne crois pas.
    car j'obtiens, jusqu'à présent, une réponse que lorsque que le scritp perl a analysé tous les fichiers !!!!

    Merci beaucoup pour vos réponses !!!

  2. #2
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: [XMLHttpRequest] Interactivité client/serveur
    Citation Envoyé par LE NEINDRE
    Ce que j'aimerai, je ne sais pas si c'est possible, c'ets obtenir une réponse de mon script à chaque fois qu'un fichier a été analysé afin de faire une barre de progression du côté client.

    Est-ce possible ??

    Si oui, Sans détailler, est-ce que ma fonction Calculate suffit ? Je ne crois pas.
    car j'obtiens, jusqu'à présent, une réponse que lorsque que le scritp perl a analysé tous les fichiers !!!!
    C'est possible, mais ta fonction calculate est loin d'être suffisante.
    A mon avis, ça va être très compliqué pour pas grand chose.

    Sinon, dans le principe, il faudrait faire une requete HTTP vers ton serveur qui lance le script, puis des requetes HTTP périodiques qui vérifie le nombre de fichier traité dans ton script (ça veux dire des threads sur ton serveur pour qu'il puisse répondre) et enfin le retour de la réponse.

    Mais bon, c'est compliqué pour à priori pas grand chose.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Bonjour DenisC !

    j'ai un résultat, ça marche, mais je ne sais pas si c'est pas un peu lourd.

    1) Dans une première requete, je demande le nombre de fichiers à traiter.
    2) Je fais ensuite une boucle de 0 au nombre de fichier à traiter, dans laquelle je lance une autre requete (pour ce que je veux faire (calcul du nombre de caractères).
    3) Au retour, je fais avancer ma progressbar (à l'aide des creatElement("TD"), dans un tableau


    Qu'en penses tu ?? Est-ce risqué ??
    Pour info, le script

    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
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    var compteur=0;
    var MyMonth;
    function Calculate(id,month)
    {
          MyMonth=month;
          if (window.ActiveXObject){xhr_object=new ActiveXObject("Microsoft.XMLHTTP");}
                else{alert("your browser doesn't allow ActiveX Object");return;}
     
                var data="CGISESSID="+id+"&MONTH="+month+"";
                var filename="./X400_forfait_xml.pl";
                xhr_object.open("POST",filename,true);
                xhr_object.onreadystatechange = function() {   
     
                                                            if(xhr_object.readyState == 1)
                                                            {
                                                                document.getElementById('RequestStatus').innerHTML="Ouverture de la connexion";
                                                            } 
                                                            if(xhr_object.readyState == 2) 
                                                            {
                                                                document.getElementById('RequestStatus').innerHTML="Connexion ouverte ... Initialisation de la requete";
                                                            }
                                                            if(xhr_object.readyState == 3) 
                                                            {
                                                                document.getElementById('RequestStatus').innerHTML="Requete en cours ...";
                                                            }
                                                            if(xhr_object.readyState == 4) 
                                                            {   
                                                                  document.getElementById('RequestStatus').innerHTML="Requete terminée avec succès";
                                                                  xmlres=xhr_object.responseText.split(" ");
                                                                  document.getElementById('ENTETE').innerHTML="Performing caculation on "+xmlres.length+" files (for "+MyMonth+")";
     
                                                                  my_row=document.createElement("TR");
                                                                  for(var i=0;i<xmlres.length;i++)
                                                                  {
                                                                        var my_cell=document.createElement("TD");
                                                                        my_cell.id="TD"+i;
                                                                        my_cell.style.background="rgb(255,0,0)";
                                                                        my_row.appendChild(my_cell);
                                                                  }
                                                                  document.getElementById('PROGRESS').appendChild(my_row);
     
                                                                  for (var i=0;i<xmlres.length;i++)
                                                                  {
                                                                        document.getElementById('EDI_MESSAGE').innerHTML="Analysing "+xmlres[i]+"";
                                                                        CalculatePerFile(xmlres[i]);
     
     
                                                                  }      
     
                                                            }
                                                      }     
          xhr_object.send(data);
     
    }
     
    function CalculatePerFile(FILE)
    {
     
          if (window.ActiveXObject){var xhr_object=new ActiveXObject("Microsoft.XMLHTTP");}
                else{alert("your browser doesn't allow ActiveX Object");return;}
     
                var data="FILE="+FILE+"";
                var filename="./X400_forfait_xml.pl";
                xhr_object.open("POST",filename,true);
     
                xhr_object.onreadystatechange = function() {   
     
                                                            if(xhr_object.readyState == 1)
                                                            {
                                                                document.getElementById('RequestStatus2').innerHTML='Ouverture de la connexion';
                                                            } 
                                                            if(xhr_object.readyState == 2) 
                                                            {
                                                                document.getElementById('RequestStatus2').innerHTML='Connexion ouverte ... Initialisation de la requete';
                                                            }
                                                            if(xhr_object.readyState == 3) 
                                                            {
                                                                document.getElementById('RequestStatus2').innerHTML='Requete en cours ...';
                                                            }
                                                            if(xhr_object.readyState == 4) 
                                                            {   
                                                                  document.getElementById('RequestStatus2').innerHTML='Requete terminé avec succès';
                                                                  var xmlres=xhr_object.responseText;
                                                                  //document.getElementById('RESDIV2').innerHTML=xmlres;
                                                                  document.getElementById("TD"+compteur).style.background="rgb(0,255,0)";
                                                                  compteur++;
                                                            }
                                                      }     
          xhr_object.send(data);
     
     
     
    }

  4. #4
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par LE NEINDRE
    Qu'en penses tu ?? Est-ce risqué ??
    Pour info, le script
    C'est absolument pas risqué. Par contre, si le temps total de traitement est une contrainte, tu l'augmentes fortement en faisant de cette façon.

    En effet, tout le temps entre lequel ta requete HTTP revient, tu actualises ta fenetre, tu relances une requete et elle réarrive au serveur, ton serveur se tourne les pouces en attendant.

    Après tout dépends de tes contraintes. Si tu es sur un réseau rapide (type intranet) ou que le temps de traitement n'est pas une grosse contrainte, que le temps de traitement d'un fichier est élevé ta solution peut fonctionner sans cout exhorbitant.

    Si tu as des millions de fichiers, sur un réseau lent, avec un temps de traitement très court, tu peux multiplier par beaucoup (10?) le temps de l'opération...

    A voir

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Ok, merci pour les infos.
    Je serai sur un réseau intranet (liaison 100 Mo ou 2Mo), et le nombre de fichiers à traiter n'éxcèdera pas le 2000 ou 3000 (petite taille, 10-50 ko max).

    Donc je vais continuer dans ce sens je pense.

    C'est en tout cas, la seule solution que j'ai trouvé pour faire une progressbar qui "progresse bien" ...

    Merci pour ton aide !!!!

    Et bonne journée.

  6. #6
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par LE NEINDRE
    Ok, merci pour les infos.
    Je serai sur un réseau intranet (liaison 100 Mo ou 2Mo), et le nombre de fichiers à traiter n'éxcèdera pas le 2000 ou 3000 (petite taille, 10-50 ko max).

    Donc je vais continuer dans ce sens je pense.

    C'est en tout cas, la seule solution que j'ai trouvé pour faire une progressbar qui "progresse bien" ...

    Merci pour ton aide !!!!

    Et bonne journée.
    Une solution pour améliorer ça (mais détériorer la barre de progression) décide d'un nombre de paquets fixe (par exemple 20) et fait ce que tu faisais avant, mais en rassemblant les fichiers par paquets pour en faire 20 paquets. La barra avancera de façon plus sacadé, mais ça devrait aller plus vite.

    A toi de voir

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

Discussions similaires

  1. Web contre client/serveur que choisir??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 41
    Dernier message: 24/01/2004, 15h53
  2. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57
  3. Réponses: 2
    Dernier message: 01/10/2002, 12h25
  4. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 16h58
  5. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 15h46

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