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 :

Requêtes Ajax en cascade


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Requêtes Ajax en cascade
    Bonjour,

    Dans un objet javascript, j'ai une variable dans laquelle je charge un geojson via une requête ajax.
    Une fois que cette requête est terminée, je lance à nouveau une requête ajax sur chaque élément pour aller ajouter une propriété supplémentaire à l'élément.
    voici le code:
    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
     
    var this.dataPoint;
     
    this.point = function() {
    	return $.ajax({ 
                type: "GET", 
                url: 'scripts/gpsPoints.php?u=' + that.userID + '&start=' + that.datetimeStart + '&stop=' + that.datetimeStop
    	});
    }
     
    this.pollution = function(x, y) {
    	return $.ajax({ 
    		type: "GET", 
    		url: 'http://localhost:8080/thredds/ncss/dataThredds/mync.nc?req=station&var=NO2&latitude='+y+'&longitude='+x, 
    		dataType: 'xml',
    	});
    }
     
     
    this.recup = function() {
      that.point().done(function(data){
    	that.dataPoint = data;
    	for (var i = 0; i < that.dataPoint.features.length; i++) {
    		var x = that.dataPoint.features[i].geometry.coordinates[0];
    		var y = that.dataPoint.features[i].geometry.coordinates[1];
    		console.log(i);
    		that.pollution(x, y).done(function(xml){
    			//console.log(i);
    			that.dataPoint.features[i].properties.NO2 = $(xml).find("data[name='NO2']")[0].firstChild.nodeValue;
    		});
    	}
      });
    }
    Mais dans le résultat de la requête pollution (that.pollution(x, y).done(function(xml){), l'indice i est toujours égal à 1677 (console.log(i) mis en commentaire, 1677 est la taille du geojson dataPoint).
    Mais comme les indices vont de 0 à 1676, j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uncaught TypeError: Cannot read property 'properties' of undefined
    au moment où j'affecte la valeur à that.dataPoint.features[i].properties.NO2

    Comment faire pour 'diffuser' l'indice i correctement et que ce soit l'élément i du tableau dataPoint qui soit mis à jour avec le résultat du ième lancement de la requête pollution ?

    Merci,
    Nico

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    essayez en mettant "i" dans l'argument de "pollution" et passez ensuite cette valeur dans l'option "context" de l'appel AJAX
    http://api.jquery.com/jQuery.ajax/

  3. #3
    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
    Le "i" dans le context, ça n'a pas l'air de marcher ...
    J'ai trouvé une solution qui semble marcher :

    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
    this.dataPoint;
     
    this.init = function(u, dep, start, stop) {
     
    		that.point().then(function(data){
    				that.dataPoint = data;
    				for (var i = 0; i < that.dataPoint.features.length; i++) {
    					var x = that.dataPoint.features[i].geometry.coordinates[0];
    					var y = that.dataPoint.features[i].geometry.coordinates[1];
     
    					that.pollution(x, y, i);
    				}
     
    				console.log('Chargé dans init!');
    				console.log(that.dataPoint);
    		});
     
     
        }
     
    this.pollution = function(x, y, i) {
     
    		var p = $.ajax({ 
    					type: "GET", 
    					url: 'http://localhost:8080/thredds/ncss/dataThredds/IDF_final.20150301_NO2.nc?req=station&var=NO2&latitude='+y+'&longitude='+x, 
    					dataType: 'xml',
    					success: function(xml){
    						that.dataPoint.features[i].properties.NO2 = $(xml).find("data[name='NO2']")[0].firstChild.nodeValue;
    					}
    		});
     
     
    	}
    Je ne sais pas si c'est très Ajax et si quand il m'affiche 'Chargé dans init!' il a vraiment tout chargé...

    Un autre problème survient après :
    Dans ce même objet, j'ai une fonction extract() qui extrait des éléments du geojson dataPoint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    this.extract = function(u, mintime, maxtime) {
    		var res = that.dataPoint;
    		console.log(res);
    		for (var i = 0; i < res.features.length; i++) {
    			if (res.features[i].sampno == u & new Date(res.features[i].mintime) >= new Date(mintime) & new Date(res.features[i].maxtime) <= new Date(maxtime)) {
     
    			}
    			else {res.features.splice(i, 1);}
    		}
    		return res;
    	}
    Mais le console.log(res) de cette fonction renvoie 'undefined'.
    Pourquoi ?

    Nico

  4. #4
    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
    si je met le résultat des requêtes ajax qui vont chercher la pollution dans un geojson extérieur à l'objet, ça fonctionne ...
    je n'ai plus le undefined et je peux travailler ensuite sur les données.
    donc ça veut dire que les résultats des requêtes ajax ne sont pas mis dans le geojson de l'objet?

    Nico

Discussions similaires

  1. [Prototype] Requête AJAX + Espace FREE
    Par Zarx dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 05/11/2007, 14h17
  2. [AJAX] Exécuter 2 requêtes ajax/php.
    Par djalilk dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/10/2007, 11h52
  3. [AJAX] Résultat de requête Ajax vide sous IE, mais pas sous FF
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/09/2007, 16h18
  4. Réponse à requête AJAX
    Par Mister Nono dans le forum Struts 1
    Réponses: 2
    Dernier message: 03/07/2007, 13h19
  5. [AJAX] Centraliser les requêtes AJAX afin d'avoir un seul appel
    Par Mike_69 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/03/2007, 16h51

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