Execution JS depuis un appel AJAX

Bonjour,
voilà, j'ai une page principale qui contient un ensemble d'onglets.
Chaque onglet reçoit via un appel AJAX du contenu pour accélérer le chargement de la page.
Dans l'un de mes onglets, j'ai un appel AJAX qui retourne du texte mais aussi un certain nombre de scripts JS (nombre qui peut varier).
Donc, pour que mon script soit interprété par le navigateur, je me suis servi de cette astuce: http://dev.petitchevalroux.net/javascript/executer-javascript-appel-ajax-javascript.357.html

Tous les scripts s'exécutent sauf ceux du type
<script src=""></script>

Comment résoudre ce problème ?

9 réponses

  1. Contributeur
    Hello,

    Les scripts type "src" ne s'exécutent pas. SRC est l'abbréviation de "source" : ces lignes ne font que charger du code JS se trouvant dans la page visée, mettant ainsi divers variables et fonctions à disposition. Après il faut les lancer manuellement.
    0
    1. Bonjour,
      J'ai trouvé ce qui semblait être la réponse; bien que cela ne m'aide pas...
      https://forums.commentcamarche.net/forum/affich-10357968-script-javascript-dans-page-ajax

      Donc, voilà mon script qui devrait s'exécuter (il est dans ma page PHP appelé par AJAX)
      echo '<script>';
      	echo 'alert("Test");';
      	echo 'var sprytooltip'.$k.' = new Spry.Widget.Tooltip("sprytooltip'.$k.'", "#sprytrigger'.$k.'");';
      	echo '</script>';

      Le alert("Test"); est là juste pour tester si le script fonctionne ou non.

      Maintenant, mon code JS qui doit interpréter les scripts JS:
      function request(url,cadre) { 
      var XHR = getXMLHttpRequest();
      XHR.open("GET",url, true); 
      XHR.onreadystatechange = function attente() { 
      if(XHR.readyState == 4) { 
      	document.getElementById(cadre).innerHTML = XHR.responseText; 
      	var AllScripts = cadre.getElementsByTagName('script');
      		for (var i=0; i<AllScripts.length; i++) { 
      			var s=AllScripts[i]; 
      			if (s.src && s.src!="") { 
      				// Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts 
      				alert(s.src); 
      				eval(getFileContent(s.src)); 
      
      			} 
      			else { 
      				eval(s.innerHTML); 
      			} 
      		} 
      
      	}
      	else {
      	document.getElementById(cadre).innerHTML = '<img src="content/loading.gif"/>';
      	}
      }
      XHR.send(null);	
      return; 
      }


      Où est mon soucis ?
      0
      1. modifies:

        if(XHR.readyState == 4 && XHR.readyState == 200)
        pour attendre la réception complète de la réponse
        0
        1. ça n'a rien changé malheureusement :(
          0
          1. si je comprend bien tu veux faire executer des scripts javascript au moment de la réception / afffichage du contenu de chaque onglet ?

            Alors essayes de mettre ces scripts dans des fonctions qui seront chargées dès le départ dans la page, elles ne doivent ps faire des Mégaoctets,, puis,

            XHR.onreadystatechange = function attente() { 
            if(XHR.readyState == 4 && XHR.readyState == 200) {
             
            	document.getElementById(cadre).innerHTML = XHR.responseText; 
              //et la tu lances tes fonctions
            
            fonction_js1();
            fonction_js2();
            fonction_js3();
            


            mais ton nombre de fonction n'est pas fixe suivant les onglets alors au lieu de réponseText utilises reponse XML et la tu peux avoir une réponse a plusieurs items

            vas voir sur google comment ça marche

            tu as aussi Json
            0
            1. En fait, cela ne m'arrange pas... J'ai trouvé ça sur CCM:
              https://forums.commentcamarche.net/forum/affich-10357968-script-javascript-dans-page-ajax#p23490249

              Dans le 2ème message, ils expliquent comment faire. C'est pile poil ce que j'ai besoin, si ce n'ai que j'arrive pas à faire ce qu'ils font ^^.
              0
              1. bonsoir,

                Je viens de faire l'essai avec une page et de l'Ajax, ça coince au niveau de cette ligne:

                var AllScripts = cadre.getElementsByTagName('script');

                il faudrait document.getElementByTagName('script'); et pas cadre donc ça te retournerait tous les scripts de ta page complète

                et la je ne vois pas comment faire pour parcourir seulement ceux chargés par ajax dans le div avec getElement...

                Si tu a un peu de délai, je regarderai la solution que je te proposait avec réponse XML / appel de fonctions et te la transmettrait
                0
                1. Oui, j'ai tout mon temps ^^. J'avais aussi fait avec tous les scripts de la page; mais là encore, ça ne m'arrange pas car j'ai des alert() à certains endroits qui ne doivent pas être ré-exécuté...

                  Merci de m'aider ;)
                  0