11521 sujets

JavaScript, DOM et API Web HTML5

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head
<script type="text/javascript">
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200){
myFunction(this);
}
};
xmlhttp.open("GET", "GalerieZ.xml", true);
xmlhttp.send();

function myFunction(xml) {
var Items, i, xmlDoc;
xmlDoc = xml.responseXML;
Items = xmlDoc.getElementsByTagName('photo');
for (i = 0; i < Items.length; i++) {
var numid = Items.getAttribute("nu");
var lpays = Items[i].getAttribute("pa");
var name = Items[i].getAttribute("su");
var Themes = new Array();
Themes.mynumid = numid;
Themes.mypays = lpays;
Themes.myname = name;
gItems.push(Themes);
}
.............
Bonsoir
La portion de script indiquée ci-desssu fonctionne correctement en local avec l'aperçu de Dreamweaver et mon programme fait ce que j'attends.
Mais quand je lance celui-ci avec n'importe quel navigateur toujours en local, la fonction "myFunction(xml)" ne s'exécute pas et le programme ne fonctionne pas..........
Quelqu'un aurait-il une idée ???
Merci
[/i][/i]
Modérateur
Bonjour,

Déjà, il manque un ">" à la balise <head>, et il manque une "}" en fin de code. Mais tout ça n'est peut-être qu'un oubli de copier-coller.

Je vois aussi qu'il manque probablement un [ i ] à la ligne :
var numid = Items.getAttribute("nu");


Je vois aussi à la dernière ligne l'objet gItems qui n'est défini nulle part avant.

Bref, pas mal d'erreur de code à corriger, et qui rendent improbable en l'état que ça marche "vraiment" où que ce soit.

Ensuite, une fois ça éventuellement corrigé, il faut regarder ce que dit la console (clic droit + inspecter), parce que sans le xml ni le html de la page, bah, ça peut venir de n'importe où, les erreurs.

Amicalement,
Modifié par parsimonhi (07 Nov 2020 - 21:02)
Modérateur
Bonjour,

Il est probable que ce soit un problème de Cross Origin Policy (si c'est ça, la console va te le dire).

Et dans ce cas, bah, le mieux est de ne pas chercher à exécuter le fichier html en temps que fichier local (c'est à dire quand l'url commence par file:// dans la barre d'adresse du navigateur).

Amicalement,
Les apparentes erreurs de codage viennent du copier/coller.
Pouvez-vous m'indiquer comment coller le code tel que dans le programme, avec les numéros de lignes ?
Je précise encore que mon programme fonctionne correctement dans l'aperçu Dreamweaver. C'est un site dédié à mes activités photographiques, qui fonctionnait correctement il y a quelques mois.
Le fichier XML est une base de données de matériels, de photographies,....
De plus, un site crée sur les mêmes principes fonctionne sur les pages perso Orange.
Merci pour toute suggestion sur ce problème.
Modérateur
Bonjour,

Je redis qu'il faut regarder ce que la "console" dit.

Pour voir ça, on affiche la page qui ne marche pas dans un navigateur, on fait clic-droit n'importe où dans la page, et on sélectionne dans le menu qui s'affiche "inspecter". La fenêtre du navigateur se coupe en deux. On recherche dans la partie qui vient de s'afficher l'onglet "console". Là, on doit trouver des erreurs.

Selon moi, je redis qu'il est probable que l'erreur soit quelque chose du genre (si tu utilises le navigateur Chrome) :
Access to XMLHttpRequest at 'file:///...' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.


La raison de cette erreur est que les navigateurs sont de plus en plus pointilleux sur les questions de sécurité. C'est un comportement assez récent. Ici, elle signifie que le navigateur n'accepte de pas de requête en ajax pour accéder à un fichier qui serait d'un domaine différent de la page si la page n'a pas été affichée par un protocol autorisé.

Ton code fait bien une requête ajax, et essaie d'accéder à un fichier en local, mais comme la page a été lancée "directement" sans serveur, de fait, la page n'appartient à aucun domaine, le protocol utilisé est file:///, et donc le navigateur empêche la requête de s'exécuter.

Il n'y a donc sans doute pas d'erreur dans ton code, mais il ne peut fonctionner que si la page est consultée depuis un serveur web, qu'il soit local ou distant, ou apparement via un logiciel comme Dreamweaver qui fait comme s'il s'agissait d'un serveur web (je le suppose, mais je n'ai jamais utilisé Dreamweaver). Mais il ne peut pas fonctionner si on essaie d'afficher la page en local sans serveur.

Amicalement,

PS: mais évidemment, pour être certain que c'est bien ça, encore une fois, il faut vérifier ce que dit la "console".
Modifié par parsimonhi (08 Nov 2020 - 18:57)
Après avoir suivi tes conseils voilà ce que je trouve sur console :
Baty_ZoomThèmesZ.html:1
Access to XMLHttpRequest at 'file:///C:/Users/jean-/Documents/MesSitesWeb/BatyWebSite/GalerieZ.xml' from origin 'null' has been blocked by CORS policy:
Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, edge, https, chrome-untrusted.
GalerieZ.xml:1 Failed to load resource: net::ERR_FAILED
pt-serif-regular.woff2:1 Failed to load resource: net::ERR_FILE_NOT_FOUND

Baty_ZoomThèmesZ.html: 1
L'accès à XMLHttpRequest à 'file: /// C: /Users/jean-/Documents/MesSitesWeb/BatyWebSite/GalerieZ.xml' à partir de l'origine 'null' a été bloqué par la stratégie CORS:
Les demandes d'origine croisée ne sont prises en charge que pour les schémas de protocole: http, données, extension chrome, edge, https, chrome non approuvé.
GalerieZ.xml: 1 Échec du chargement de la ressource: net :: ERR_FAILED
pt-serif-regular.woff2: 1 Échec du chargement de la ressource: net :: ERR_FILE_NOT_FOUND

Que ce soit en anglais ou en français, je ne vois pas quoi faire ???????
Modérateur
Bonjour,

Ces messages signifient que tu ne peux pas faire marcher ta page en local sans serveur web.

Y a rien qu'on puisse faire.

Relire les explications de mon post précédent.

Amicalement,

PS: le seul truc possible que je vois, c'est d'installer un serveur web sur ton ordinateur (ce qui, soit dit en passant, n'est pas très compliqué)
Modifié par parsimonhi (08 Nov 2020 - 22:11)