Execution JS depuis un appel AJAX

Fermé
anatolekadel Messages postés 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 - 25 oct. 2011 à 21:27
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 30 oct. 2011 à 20:14
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 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 oct. 2011 à 08:16
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 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 3
26 oct. 2011 à 11:35
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 oct. 2011 à 09:36
modifies:

if(XHR.readyState == 4 && XHR.readyState == 200)
pour attendre la réception complète de la réponse
0
anatolekadel Messages postés 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 3
28 oct. 2011 à 23:37
ç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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 oct. 2011 à 09:28
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 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 3
29 oct. 2011 à 13:15
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 oct. 2011 à 21:30
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 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 3
29 oct. 2011 à 23:24
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 oct. 2011 à 20:14
je t'ai envoyé un mp
0