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