L'éditeur JavaScript
Visiteur non-identifié | Identifiez-vous | Devenir membre
Code perdu ? | Combien de visiteurs sur votre site ?
Rechercher :
Page d'accueil
     Home Page

JavaScript
     Tous les scripts
     Proposer un script
     Recherche de script
     AJAX
     Cours de JavaScript
     Liste de discussion
     Forums

Services :
     CountUs
     myCircle
     ClickInText
     XooIt

Trucs et astuces :
     HTML / CSS
     PHP / MySQL
     Réferencement
     Graph / Présentation
     Toutes les astuces
     Ajouter un article

MailingList :
122616 abonnés

Annuaire webmaster :      Hebergement web
     Referencement
     Sites webmasters
     XHTML - CSS2
     PHP
     Affiliation - Pub
     FAI

     Annuaire webmaster

Ressources pour webmasters :
     Kit graphique
     Foire aux questions
     Les membres
     Devenir annonceur
     Faire un lien
     Contact

Partenaire :
     Compteur live
     Créer un forum
     Le PHP facile
     Comscripts
     Liens sponsorisés
     Blog
     Page Rank
     Gifs animés, f...
     Poésie et cita...
     Azote.org - no...
     Easy-script.com
     Web creation ...
     Je crée mon site
     Outils de créa...
     Electroniq...
     K i s s design
     Créer son site...
     Les autres
     Votre site ici ?


Le forum ] [ Préférences ] [ Nouveau sujet ] [ Répondre ] [ Recherche ] [ Vos sujets ] [ Tous lus ] [ Flux RSS ]


[ Forums >> JavaScript >> Problèmes de création JavaScript / DHTML >> Pb récupération objets ]

> 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&amp;v=2&amp;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.
Le forum ] [ Préférences ] [ Nouveau sujet ] [ Répondre ] [ Recherche ] [ Vos sujets ] [ Tous lus ] [ Flux RSS ]






compteur gratuit
actuellement en ligne

    PUBLICITE



     ANNUAIRE WEBMAST.
Perso.cc
Redirection gratuite avec statistiques, compteurs...
Réservez votre nom de domaine sous la forme :
votresite.fr.vc
votresite.fr.cc
votresite.eu.ma
votresite.us.ma
http://www.perso.cc/
Cat : Redirection
Voir l'annuaire webmaster


     LES SCRIPTS :
78 à éditer
68 à copier/coller
247 des membres
2580 sur le web
>> Tous les scripts

     LES MEMBRES :
65980 membres
4655 comptes CountUs
1842 comptes myCircle

     LES FORUMS :
14 forums
40361 topics
191690 messages
>> Les forums

    SONDAGE

Vous avez un blog ou site classique ?
Un blog
Un site classique
Les deux !
La mini-astuce "Referencement" du jour par krucial
Pour savoir combien de pages de votre site sont indexées dans Google, il vous suffit de taper, dans la boite de recherche du moteur : "site:http://www.votresite.com";.
Proposer votre mini-astuce | Archives des mini-astuces
© 1999-2012 EJS - Tous droits réservés | CNIL N° 844440 | 12/02/2012 23:40:57 | Design by | Gen. en 0.495 sec.