







|
|
|
 |
| > Pb récupération objets |
[ Posté par philou99 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 01-02-2010 à 11:38 | 33 messages ]
  Bonjour,
J'ai un pb de passage et récupération de mon objet.
la variable "photos" est un tableau.
je ne connais pas le nombre d'élément du tableau tant que je n'ai pas récupéré les champs du fichier xml, ce qui est fait dans la fonction "recup_fichier_photo", (je déclare chaque élément du tableau comme un objet de type "Photo" dans la fonction).
Comment faire pour récupérer les objets créés dans la fonction ?
script éxécutable à l'adresse :
www.observatoiredeleau.fr/Essai/essai.htm
code ci-dessous.
Merci d'avance
Philou
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fiche descriptive</title>
<script type="text/javascript">
//constructeur de la classe photos
function Photo(plat,plong) {
this.lat = plat;
this.long = plong;}
var photos = new Array ();
function recup_fichier_photo(fichier,photos) {
// Récupération des données stations (lattitude, longitude) à partir du fichier xml
var request = GXmlHttp.create();
request.open("GET",fichier, true);
request.onreadystatechange = function() {
// si les data ont été chargées, le readystate passe à 4
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
for (k = 0; k < markers.length; k++) {
photos[k] = new Photo();
photos[k].lat = parseFloat(markers[k].getAttribute("lat"));
photos[k].long = parseFloat(markers[k].getAttribute("long"));
}}}
request.send(null);
return photos;}
</script>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAyR-IKou_PgJHyL0q9fVNLxTgVOmF-uHHogn7BifuCrL_l0gHXRSZYwWhLi6hIzHeHQshYghIzJI8nA"
type="text/javascript">
</script>
</head>
<body bgcolor="#FFFFFF" onload="Javascript:recup_fichier_photo('essai.xml',photos);alert(photos[0].lat)">
</body>
</html>
________________ Philou99
 
|
[ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 01-02-2010 à 12:34 | 4024 messages ]
  Je ne comprends pas trop ta demande.
Le problème -potentiel- que je vois c'est que tu utilises ta collection photos immédiatement après une requête asynchrone.
La collection photos qui est retournée est donc très probablement vide et quand tu vas faire un alert(photos[0].***) cela va planter
car il n'y a pas d'élément [0]. Ta collection ne sera remplie que lorsque le onreadystatechange sera déclenché quelques (m)S plus tard.
Il faudrait revoir la logique :
soit tu utilises une requête synchrone (qui attend la fin du chargement de la page externe) pour garantir que la collection est bien remplie au moment de ton return;
soit tu utilises une requête asynchrone et tu déplaces le traitement dans la fonction de rappel.
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 02-02-2010 à 10:06 | 4024 messages ]
 
Merci pour ta réponse, je pense en effet que le problème est un problème de synchronisation.
Je désire pouvoir récupérer les infos du fichier xml pour pouvoir implémenter des listes déroulantes dans le body.
Je veux être sûr que les paramètres des photos ont été entièrement enregistrés avant de continuer.
Merci d'avance
|
|
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 02-02-2010 à 10:48 | 4024 messages ]
  version asynchrone
...
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
for (k = 0; k < markers.length; k++) {
photos[k] = new Photo();
photos[k].lat = parseFloat(markers[k].getAttribute("lat"));
photos[k].long = parseFloat(markers[k].getAttribute("long"));
traitement();
}}}
request.send(null);
return photos;}
...
// fonction déclenchée à l'issue du chargement de la page externe
function traitement()
{
// ici le traitement à effectuer
alert(photos[0].lat);
}
...
<body bgcolor="#FFFFFF" onload="Javascript:recup_fichier_photo('essai.xml',photos);">
|
|
[Message édité par v1nce le 02-02-2010 à 10:50]
[Message édité par v1nce le 02-02-2010 à 10:52]
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par philou99 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 03-02-2010 à 10:31 | 33 messages ]
  Merci V1nce, j'ai bien résolu mon problème en insérant dans la fonction recup_fichier_photo une fonction effectuant mon traitement (définition dynamique du contenu de mes sélecteurs ).
________________ Philou99
|
|
Services email :
  Vous devez vous identifier pour profiter des services par email du forum.
|

|