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] Requête serveur trop lente


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de _FaFa_
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Par défaut [AJAX] Requête serveur trop lente
    Bonjour

    Je tente de créer une arborescence d'un système UNIX ou Windows en javascript avec l'aide de la libraire YUI. Les différents chemins et fichiers sont contenus dans une base de données. Pour cela je fait recours à AJAX. L'arborescence est opérationnel pour les répertoires, seulement j'essaye d'ajouter les fichiers qui correspondent à ces répertoires. Mon code est le suivant :

    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
    	function extractUrlParams () 
    	{
    		// On récupère les paramètres passer par la méthode GET
    		// Tous les paramètres seront stockés et retournés via le tableau tabRetour
    		var tab = location.search.substring(1).split('&');
    		var tabRetour = [];
    		for (var i=0; i<tab.length; i++) 
    		{
    			var x = tab[ i ].split('=');
    			tabRetour[i]=x[1];
    		}
    		return tabRetour;
    	}
     
    	function createRequestObject()
    	{
        	var http;
       		if (window.XMLHttpRequest)
        	{ // Mozilla, Konqueror/Safari, IE7 ...
            	http = new XMLHttpRequest();
        	}
        	else if (window.ActiveXObject)
       		{ // Internet Explorer 6
            	http = new ActiveXObject("Microsoft.XMLHTTP");
        	}
        	return http;
    	} // createRequestObject()
     
    	function returnFiles(node)
    	{
    		// On extrait le nom du client de l'url
    		var clientName = extractUrlParams ();
    		// On créer l'objet XMLHTTPRequest
    		var http = createRequestObject();
    		// On ouvre la connexion avec le serveur
      		http.open('GET', './file.php?clientName=' + clientName[1] + '&path=/' + node.data + '/', true);
     		http.onreadystatechange = (function ()
        	{
         		if (http.readyState == 4 && http.status == 200)
    	    	{
    	    		// On récupère le données de la requête dans le tableau files
    	        	var files = validateJSON(http.responseText);
              		if (files !== false)
              		{
                		for (var i in files)
                		{
                			// On ajoute un noeud style HTML
                  			var tempHTML = new YAHOO.widget.HTMLNode(files[i].name, node, false, true);
                  			// On chande l'icône de ce noeud
    						tempHTML.contentStyle = "icon-doc";	
                		}
               		}
               	}
        	});	
      	http.send(null);
    	} // returnFiles()
    J'ai inclus la fonction qui extrait les paramètres de l'url ainsi que celle qui créer l'objet XMLHttpRequest.

    Lorsque je clique sur un noeud ( un répertoire ), il ouvre ce dernier mais n'affiche rien. A ce moment je referme ce répertoire puis dès que je l'ouvre à nouveau il affiche correctement les fichiers. En ce qui concerne mes répertoires j'ai utilisé une requête asynchrone, et il affiche tout du premier coup. Je crois que la requête est trop longue et qu'il passe alors à la suite du code vu qu'il n'a pas fini de tout charger. Je voudrais savoir comment faire pour qu'il affiche tout du premier coup. J'ai essayé la requête synchrone, seulement il n'affiche rien ...

    Je vous remercie de votre attention,

    FaFa

  2. #2
    Membre confirmé Avatar de _FaFa_
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Par défaut
    Bon j'ai trouvé la réponse. Il fallait se pencher un peu plus sur la requête synchrone.

    Le code suivant marche :

    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
    function returnFiles(node, nodeLabel)
    	{
    		// On extrait le nom du client de l'url
    		var clientName = extractUrlParams ();
    		// On créer l'objet XMLHTTPRequest
    		var http = createRequestObject();
    		// On ouvre la connexion avec le serveur
      		http.open('GET', './file.php?clientName=' + clientName[1] + '&path=' + nodeLabel, false);
      		http.send(null);
     		// On récupère le données de la requête dans le tableau files
    	        var files = validateJSON(http.responseText);
    	        if (files !== false)
                    {
            	        for (var i in files)
                            {
                	              // On ajoute un noeud style HTML
                	              var tempHTML = new YAHOO.widget.TextNode(files[i].name, node, false);
                	              // On chande l'icône de ce noeud
    			      tempHTML.labelStyle = "icon-doc";	
                            }
                     }
    	} // returnFiles()

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/07/2013, 15h07
  2. Requête SQL trop lente
    Par enavant1 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 29/06/2011, 20h01
  3. Requête BD trop lente => Arrêt du processus ASP.NET
    Par sk8world dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/04/2010, 15h25
  4. Requête trop lente, comment l'optimiser?
    Par getz85 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 29/01/2008, 13h40
  5. auto-killer une requête trop lente
    Par Nico57 dans le forum Oracle
    Réponses: 5
    Dernier message: 05/12/2006, 18h04

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