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] Requête ajax qui renvoie une chaine


Sujet :

AJAX

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut [AJAX] Requête ajax qui renvoie une chaine
    Bonjour,

    J'ai une page web avec une carte, et je fais une requête ajax pour récupérer les données à afficher sur cette carte.

    ma fonction ajax :
    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
    function WMSLayersList(requete) {
    	var list='';
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
     
    				// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    				if(xhr.readyState == 4 && xhr.status == 200){
    					var docXML= xhr.responseXML;
     
    					var i,j, n_layers, layers = docXML.getElementsByTagName("Layer");
    					n_layers = layers.length;
    					for (i = 0; i < n_layers; i++) {
    						var layer = layers[i];
    						if (layer.hasAttribute('queryable')) {							
    							layerName = layer.getElementsByTagName("Name")[0].firstChild.nodeValue;
    							if (layerName.substr(0,2)=="PI") {
    								list = list + layerName + ',';
    							}
    						}
     
    					}
    					list = list.substr(0, list.length-1);	// pour enlever la dernière virgule
    				}	// fin if(xhr.readyState == 4 && xhr.status == 200)
     
    				}	// fin function xhr.onreadystatechange
    	xhr.open("GET",requete,true);
    	xhr.send(null);
    	alert('list='+list);
    	return list;	
    }
    l'appel à ma fonction dans ma page html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var list=WMSLayersList('http://www.monsite.fr/geoserver/wms?service=WMS&version=1.1.0&request=getCapabilities');
    La requête passée en paramètre est une requête wms sur un serveur de données géographiques. Cette requête renvoie au format xml la liste des couches géographiques disponibles sur le serveur (nom, emprise géographique, système de coordonnées, ...).
    Je veux renvoyer la liste des noms des données géographiques, séparés par une virgule.

    Le problème vient de ma fonction ajax :
    si je met à la fin de la fonction l'instruction alert, pour voir ce qu'il y a dans la variable list, celle-ci est vide, mais au final, la carte se met quand même correctement à jour.
    si je ne met pas cette instruction alert, la carte ne se met pas à jour et j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code="org.geoserver.wms.kvp.GetMapKvpRequestReader"No LAYERS been requested
    Quelqu'un a-t-il une idée du problème ?

    Merci,

    Nico

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    bonjour

    j'ai déjà eu le même type de pb qui provenait d'une erreur de syntaxe et ou de nom de variable inaproprié. Déplace ton alerte , traces tes valeurs pour essayer de cibler ton pb.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Bonjour,

    onreadystatechange est un évènement déclenché lors d'un chagement d'état dans l'appel Ajax.

    Ce qui me gène dans le code donné est que la variable "list" mise à jour par cet évènement est déclarée et renvoyée avant son remplissage puisque l'appel est asynchrone (le code javascript continue son exécution)

    Il serait préférable dans ta fonction de passer une callback qui va recevoir list en paramètre pour de réaliser directement dans onreadystatechange la mise à jour de ta page.

    Code exemple : 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
    function WMSLayersList(requete, callback) {
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    				var list = '';
    				// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    				if(xhr.readyState == 4 && xhr.status == 200){
    					var docXML= xhr.responseXML;
    					
    					var i,j, n_layers, layers = docXML.getElementsByTagName("Layer");
    					n_layers = layers.length;
    					for (i = 0; i < n_layers; i++) {
    						var layer = layers[i];
    						if (layer.hasAttribute('queryable')) {							
    							layerName = layer.getElementsByTagName("Name")[0].firstChild.nodeValue;
    							if (layerName.substr(0,2)=="PI") {
    								list = list + layerName + ',';
    							}
    						}
     
    					}
    					list = list.substr(0, list.length-1);	// pour enlever la dernière virgule
    				}	// fin if(xhr.readyState == 4 && xhr.status == 200)
    				callback(list);                           
    			}	// fin function xhr.onreadystatechange
    	xhr.open("GET",requete,true);
    	xhr.send(null);
    }

    Y.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/11/2016, 00h18
  2. Requête insert qui conient une chaine avec accents
    Par unix27 dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/05/2012, 01h22
  3. [AJAX] Pop up qui renvoie vers une autre page
    Par gettingway dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/07/2008, 15h06
  4. [AJAX] [PHP] Srcipt qui retourne une valeur
    Par Gregory.M dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/02/2008, 13h58
  5. Requête qui renvoie une liste de données
    Par fougna dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/08/2007, 12h05

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