rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010
-
19 avril 2010 à 19:18
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 2011
-
24 avril 2010 à 10:39
Bonjour à tous,
j'ai le problème suivant :
j'utilise Ajax (prototype et scriptaculous) pour générer un formulaire transcrit par XSLT préalablement décrit dans un document XML :
HTML--->AJAX--->PHP--->XSLTPROCESSOR--->Résultat dans un div (id="ici") du HTML
L'intrigue : le résultat du XSLTPROCESSOR contient du code javascript :
Bien sur ce code ne peut être exécuté lors de l'affichage du résultat dans le HTML.
Du coup je fais ceci a partir du HTML qui lance la requete AJAX :
var scripts = document.getElelementById('ici').getElementsByTagName('script')
for (var i=0; i<scripts.length; i++) {
eval(scripts[i].text);
}
Ce qui théoriquement devrait exécuter mon code javascript contenu dans le résultat.
Il n'en n'est rien !
En effet : la balise <script> semble INTROUVABLE au yeux de getElementsByTagName !(dailleur la suite du code javascript n'est pas exécuté, il y a quelque chose ici que javascript n'aime pas...)
Le plus bizarre c'est que lorsque je fais un getElementsByTagName sur une balise
quelconque du résultat, eh ben la il, trouve...
Ca fait déjà un certain temps que je suis sur le problème.
Si quelqu'un peut m'aider avant que je ne trouve la solution dans 5 jours, ou que je n'abandonne mon projet, ce serait vraiment super et je lui serait très reconnaissant !
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 22 avril 2010 à 03:49
Trouvé !
Prototype gère mon problème en fait :
il suffisait d'ajouter l'option :
evalScripts:true
dans mon Ajax.Updater.
j'avais essayé evalJS donné sur le site offciel mais apparement, c'est evalScripts...
Comprit les enfants ? evalJS c'est le mal.
Non plus serieusement evalJS doit être utilisé uniquement si la réponse de la requete AJAX
est du code javascript et uniquement du code javascript. dans le cas contraire, utiliser
evalScripts.
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 19 avril 2010 à 20:02
Oui, après il suffit de passer par getElementById, Ça marche mais bon le problème sera
que je ne connaitrais pas le nombre de balises script
enfin je pourrais faire comme ca en bidouillant un peu, ca ne serait pas vraiment correct
(w3c et tout ca...) sinon j'aimerais quand meme comprendre pourquoi la variable scripts
reste vide [Undefined]...
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 19 avril 2010 à 23:02
Bon allé Feuk W3C, mon xsl balance une fausse balise <sscript>...bla bla bla...</sscript>
Et le getElementByTagName marche sans pb. je me demande parfois comment les concepteurs de ces méthodes (qui doivent être compétents) font pour ne pas changer un peu les regles du xml W3C and co... Ceci dit si quelqu'un est capable de me dire pourquoi j'ai ce problème je serais content et j'en adopterais la solution.
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 20 avril 2010 à 19:07
Bonjour,
avec quel explorateur as tu ton soucis ?
j'ai réalisé un petit fichier test et je n'ai pas rencontré de problème pour récupérer les scripts.
Donc apparemment il nous manque quelque chose pour mieux appréhender le problème.
rivarol89
Messages postés19Date d'inscriptiondimanche 27 février 2005StatutMembreDernière intervention22 avril 2010 22 avril 2010 à 03:04
j'ai moi même procédé à des test miniatures pour voir si mon probleme ne venait du reste du code, eh ben non c'est la meme histoire. Utilise tu bien ajax ? je procède ainsi :
index.html lance une requette AJAX qui consiste à intéroger un script php en lui postant l'adresse d'un fichier xml et d'un fichier xml, le php Utilise XSLTProcessor pour transcrire
le XML en HTML et le renvoi via un echo.
Sur le OnComplete de la requette AJAX je procede à un getElementsByTagName("script")
à fin de mettre la main sur les script contenus dans le résultat de la requette AJAX (qui n'ont pas été éxécutés étant donné leur incrustation tardive).
C'est ici que ca bloque : getElementsByTagName("script")ne fonctionne pas : le tableau renvoyé est vide.
Du coup j'ai placé le code javascript généré dans le xsl entre les balises <sscript></sscript>
Cette balise n'existe pas ! mais est bien trouvée par getElementsByTagName("sscript") et je peu ainsi exécuter mon code.
Maintenant le problème c'est qu'apparement IE n'a pas l'air d'aimer ca.
Vous m'aideriez beaucoup en m'expliquant d'ou vient le problème car je n'ai toujours pas trouvé.
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 24 avril 2010 à 10:39
Bonjour et merci pour le retour, c'est bon à savoir...
Ce qu'il faut également savoir c'est que lorsque l'on charge un fichier au format HTML dans un DIV IExplorer ne copie dans celui ci que la partie entre les balises BODY, ce qui fait que les scripts ne sont pas repris sauf si ils sont mis juste avant la balise de fin de BODY.