5546 sujets

Sémantique web et HTML

Bonjour, Voici le problème :
---------------------------------------------------------------------------------------

<script type="text/javascript" src="BWS-Datas000.js"></script>
<script>
gThèmes = new Array();
gComs = new Array();
gPhotos = new Array();
ChargerDatas();/*** Cette fonction se trouve dans le fichier BWS-Datas000.js ***/
	alert("gThèmes.length = " + gThèmes.length); /*** OK bon résultat ***/
	alert("gComs.length = " + gComs.length);       /*** OK bon résultat ***/
	alert("gPhotos.length = " + gPhotos.length);   /*** OK bon résultat ***/
/*** Boucle 1 ***/	
for (var i = 0; i <= gThèmes.length; i++) {
	alert(gThèmes[i].myname); /*** Affichage correct du contenu du tableau ***/
};
/*** FIN DU PROGRAMME La suite ne s'exécute pas !!!!!!!!!!!!! ***/
/*** Boucle 2 ***/	
for (var j = 0; j <= gComs.length; j++) {
	alert(gComs[j].mycom);
};
/* Boucle 3 ***/
for (var k = 0; k <= gPhotos.length; k++) {
	alert(gPhotos[k].myurl);
};
</script>


Ce programme de test vise à exploiter des données issues du fichier BWS-Datas000.js par la fonction ChargerDatas().
il s'exécute correctement jusqu'à la fin de la boucle 1 puis se termine.
Si je supprime la boucle 1, il exécute correctement la boucle 2 puis se termine.
Si je supprime les boucles 1 et 2, il exécute correctement la boucle 3.
Je n'y comprend plus rien !!!!!!!!! Merci de tout conseil. je dois faire une énormité pour avoir un tel Pb.
Modifié par Rodolphe (15 Nov 2020 - 16:58)
Bonsoir, merci de ta réponse.
Pour infos,
la 1ère boucle seule affiche 14 valeurs
la 2ème boucle seule affiche 6 valeurs
la 3ème boucle seule affiche 128 valeurs
les valeurs sont bien celles attendues.
Je vais approfondir ta réponse qui ne m'est pas familiaire.
Cordialement.
Pour info j'utilise l’aperçu de Dreamweaver, mais directement sous navigateur c'est pareil quel qu'il soit.
Modérateur
Bonjour,

Ton code plante à la fin de chaque boucle parce que dans tes boucles, tu mets i <= xxx.length; alors qu'il faudrait mettre i < xxx.length; (i doit aller de 0 à length-1 et non de 0 à length).

Du coup, le script essaie d'accéder à un élément qui n'existe pas à la fin de chaque boucle, ce qui explique les symptômes que tu observes.

Amicalement,
Bon, mon problème est réglé mais sans explication.
J'ai intégré ce code dans mon programme cible.
Là j'exploite le contenu des 3 tableaux sans utiliser les "alert" qui étaient une simple vérification du contenu de ceux-ci et j'obtiens ce que je veux.
Pour info, J'ai toujours utilisé le for avec le signe =< sans problème.
Pour info encore, n'arrivant pas à exploiter un fichier XML en local (nécessité d'installer un serveur contenant mes datas), j'ai mis celles-ci dans un fichier .js ce qui permet de faire tourner le programme sur mon PC.
Merci quand même pour votre aide.
Modérateur
Bonjour,

L'explication, c'est que tu as toujours ton erreur, mais qu'elle n'est plus fatale.

Amicalement,
Bonjour,
désolé de ne pas être totalement d'accord. La lecture du contenu d'un tableau commence à l'indice 0. Je l'ai vérifié sur mon test qui par miracle, sans changement s'est mis à fonctionner correctement et les "alert" donnent bien les bons résultats.
Je ne comprend pas ce qui a bien pu se passer.
Cordialement.
Modérateur
Bonjour,

Mais qu'il est têtu ! Smiley cligne

Bon, je vais donner un exemple avec des chiffres.

Supposons que ton tableau a 5 éléments. Sa "length" sera 5. Et ses éléments seront aux indices 0, 1, 2, 3 et 4 (ce qui fait 5 éléments). Il n'y aura rien à l'indice 5.

Quand tu fais un for(i=0;i<=length;i++), i va prendre les valeurs 0, 1, 2, 3, 4 et 5 ! Tout va bien se passer pour i allant de 0 à 4, mais arrivé à 5, il y aura une erreur.

Selon la nature des opérations que tu fais dans ta boucle, certaines auront comme conséquences que ton script va s'arrêter, alors que d'autres ne seront pas assez graves et le script continuera.

Pour faire une boucle correcte, il faut faire un for(i=0;i<length;i++), et i y prendra bien les valeurs 0, 1, 2, 3 et 4.

Amicalement,
Hello,
après plusieurs vérifications, je dois admettre que tu as raison.
Merci d'avoir insisté.
Amicalement et peut-être a plus pour d'autres "problèmes" que tu pourras m'aider à régler.