Execution JS depuis un appel AJAX

anatolekadel Messages postés 112 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
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

Mihawk Messages postés 4753 Statut Contributeur 846
 
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
anatolekadel Messages postés 112 Statut Membre 3
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
modifies:

if(XHR.readyState == 4 && XHR.readyState == 200)
pour attendre la réception complète de la réponse
0
anatolekadel Messages postés 112 Statut Membre 3
 
ça n'a rien changé malheureusement :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
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
anatolekadel Messages postés 112 Statut Membre 3
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
anatolekadel Messages postés 112 Statut Membre 3
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
je t'ai envoyé un mp
0