Salut,
fais attention à l’ordre dans lequel tu inclus tes scripts dans ta page. Par exemple, jQuery doit être inclus avant tout script qui utilise ce framework. (En l’occurence, ton script n’en a pas besoin).
Tu dois également t’assurer que le DOM (la représentation interne des éléments HTML) a eu le temps de se construire au moment où ton script s’exécute, si jamais ton script utilise des éléments de la page. Concrètement, si tu as un bouton qui appelle ta fonction, ton script doit être inclus après le bouton. Une bonne pratique est de surveiller les évènements indiquant que la page est prête, par exemple l’évènement 'DOMContentLoaded' en JavaScript vanilla (vanilla ça veut dire sans framework), ou encore la fonction $(document).ready() en jQuery.
Puisque tu débutes en JavaScript, autant prendre de bonnes habitudes tout de suite.

Utilise le mode strict : il suffit d’ajouter la chaîne
'use strict' au tout début de ton fichier, ou au début de tes fonctions. Ça permet, entre autres, de voir certaines erreurs qui passeraient silencieusement en mode non strict, et de repérer plus facilement des variables accidentellement déclarées globales.

Développe toujours avec la console ouverte. C’est la touche F12. On y trouve les erreurs du script, ainsi qu’une ligne de commande et tout un tas d’autres outils très utiles.

Prends l’habitude de consulter la documentation quand tu ne sais pas comment faire ce que tu veux. Le MDN est une bonne ressource, exemple :
https://developer.mozilla.org/fr/doc...XMLHttpRequest
En ce qui concerne ton problème actuel, je ne peux pas t’aider si je ne vois pas de quelle façon tu appelles cette fonction fichier_txt.
Par contre je peux t’expliquer rapidement ce que fait cette fonction dont tu ne comprends pas grand chose. D’abord il y a cette partie :
1 2 3 4 5 6 7
| if (window.XMLHttpRequest) {
obj_pers = new XMLHttpRequest(); //Pour Chrome, Firefox, Opera et les autres...
} else if (window.ActiveXObject) {
obj_pers = new ActiveXObject('Microsoft.XMLHTTP'); //Pour Internet Explorer
} else {
return false;
} |
Ce bout de code se charge de créer un objet Ajax en fonction du navigateur. La partie qui gère les ActiveX, tu peux la virer, à moins que tu aies absolument envie de faire fonctionner ta page avec IE6, dans ce cas je te souhaite bon courage 
1 2 3 4 5
| if (window.XMLHttpRequest) {
obj_pers = new XMLHttpRequest(); //Pour Chrome, Firefox, Opera et les autres...
} else {
return false;
} |
Ensuite :
1 2 3
| if (obj_pers.overrideMimeType) {
obj_pers.overrideMimeType('text/xml'); //Évite un bug de Safari
} |
La partie qui teste overrideMimeType mentionne un bug avec Safari. Ça ne fait pas beaucoup de sens de tester si overrideMimeType existe, et de continuer même si cette méthode n’existe pas. On n’est pas sûr de quel sera le type de réponse si cette méthode n’est pas appelée, et ça rend le script moins fiable. Il serait plus prudent de retourner false.
Une note à propos du type text/xml : avec ce type, le navigateur va automatiquement tenter d’interpréter le fichier qu’il reçoit comme du XML. Or, le XML a des règles de syntaxe beaucoup plus strictes que le HTML, et il n’est pas rare que les serveurs ne respectent pas ces règles. Du coup, l’interprétation échoue silencieusement et obj_pers.responseXML renvoie null. Dans le cas présent tu n’utilises pas responseXML, donc ce n’est même pas la peine de demander du XML. Au final, tu peux carrément virer toute cette partie.
Enfin,
1 2 3 4 5 6 7 8
| obj_pers.open('GET', fich, false);
obj_pers.send(null);
if (obj_pers.readyState === 4) {
return obj_pers.responseText;
} else {
return false;
}
} |
Tu ouvres la requête en mode synchrone (le 3e paramètre est false). J’attire ton attention sur le fait que le « A » de Ajax signifie asynchrone, autrement dit une requête en mode synchrone ce n’est pas de l’Ajax. Et c’est largement considéré comme une mauvaise pratique. Mais pour le moment, on va rester avec ça car c’est légèrement plus simple à apprendre.
Le test sur readyState ne sert à rien car la requête bloque l’exécution de JS (parce qu’elle est en mode synchrone). Quand l’exécution reprend, la requête est terminée donc son readyState est forcément égal à 4. Tu peux virer cette ligne également.
Au final, voilà à quoi ressemble maintenant ta fonction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function fichier_txt(fich) {
'use strict'; // active le mode strict
var obj_pers; // il faut déclarer la variable, sinon elle est globale
if (window.XMLHttpRequest) {
obj_pers = new XMLHttpRequest();
} else {
return false;
}
obj_pers.open('GET', fich, false); // false -> requête synchrone
obj_pers.send(null);
return obj_pers.responseText;
} |
Partager