IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fichier js et XMLHttpRequest


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Fa�onnier
    Inscrit en
    Ao�t 2011
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Fa�onnier
    Secteur : Industrie

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 31
    Par d�faut Fichier js et XMLHttpRequest
    Bonjour,

    apr�s moutl recherches j'en viens a demander votre aide parce que je ne comprends pas, et que je n'ai pas trouv� pour satisfaire ma compr�hension sur le net.
    je suis en formation entre autres de Javascript et pour nous apprendre de fa�on ludique tout ce que l'on peut faire avec ce langage, comme exercice notre prof nous a demand� de faire un jeu, celui que l'on voulait. J'ai opt� pour un pendu que j'ai r�ussi � coder (sans triche de recopie). Tout �tait merveilleux pour moi quand le prof me dit "c'est super mais il faut cr�er un fichier js et un fichier HTML".
    Le script fonctionne entre les balises <script></script> de ma feuille HTML, mais pas dans mon fichier js pourtant d�clar� dans le fichier HTML de cette mani�re juste au-dessus de la balise </body>:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    <script  src="js/jquery.js"></script>
    puis mon fichier js
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    <script  src="js/pendu.js"></script>
    le probl�me vient d'une fonction qui ouvre un fichier texte. C'est celle-ci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    function fichier_txt(fich) // ouvre le fichier texte qui est mon dico
    	{
    		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);
    		}
     
    		if (obj_pers.overrideMimeType) 
    		{
        		obj_pers.overrideMimeType("text/xml"); //Évite un bug de Safari
    		}
    		obj_pers.open("GET", fich, false);
    		obj_pers.send(null);
     
    		if(obj_pers.readyState == 4) 
    		{
        		return(obj_pers.responseText);
    		}
    		else 
    		{
        		return(false);
    		}
    	} // Fin de la fonction fichier_txt
    Il d�clare comme ind�fini tout ce qui touche cette variable, si toutefois s'en est une, "obj_pers". quand je dis plus haut sans triche ni copie, il y a une exception, cette fonction dont je ne comprends pas grand chose et qui ouvre mon fichier.
    Autant tout fonctionne tr�s bien quand ce fichier se trouve dans la page HTML � l'int�rieur des balises <script></script>, autant il bloque tout dans le fichier js.
    par avance je vous remercie pour votre attention et aide

  2. #2
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    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 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
      if (window.XMLHttpRequest) {
        obj_pers = new XMLHttpRequest(); //Pour Chrome, Firefox, Opera et les autres...
      } else {
        return false;
      }
    Ensuite :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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;
    }
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  3. #3
    Membre averti
    Homme Profil pro
    Fa�onnier
    Inscrit en
    Ao�t 2011
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Fa�onnier
    Secteur : Industrie

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 31
    Par d�faut
    Bonjour Watilin
    Je m'excuse pour le retard � r�pondre � ce post, mais toute cette semaine nous �tions � fond sur PHP et je n'ai pu m'occuper de avant ce matin de ce que j'avais demand� ici.
    Je te remercie pour tes conseils, j'ai eu l'impression d'entendre avec les yeux ce que mes oreilles entendent pendant les cours de la part de mon prof. Ce n'est absolument pas une critique, au contraire j'ai trouv� �a g�nial.
    Pour ce qui est de la fonction expliqu�e dans le d�tail et retravaill�e par tes soins, je ne dis pas que je serais capable de la refaire sans aide mais pour le coup les scripts dans un fichiers js ne posent plus de probl�me. Mon programme fonctionne parfaitement. Alors encore merci pour ton aide et tes explications d�taill�es. Je me suis servi de quelque chose dont je ne maitrisais pas du tout les tenants et les aboutissements. Je n'ai pas encore vu le langage Ajax. Peut-�tre j'ai �t� un peu vite... Merci.
    Ce post est donc r�solu.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 03/06/2007, 14h08
  2. XMLHttpRequest ouvrant un fichier pr�sent sur un autre serveur
    Par LeSkaMan dans le forum G�n�ral JavaScript
    R�ponses: 14
    Dernier message: 22/01/2007, 19h08
  3. [AJAX] Upload de fichier
    Par hedgehog dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 19/10/2006, 07h57
  4. XMLHTTPRequest et interception de fichier inexistant
    Par SpaceFrog dans le forum G�n�ral JavaScript
    R�ponses: 12
    Dernier message: 06/09/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo