Bonjour,
Lorsque que je recois ma réponse ajax, je place le code recu dans ma div.
A l'intérieur du code recu je demande, l'execution d'une fonction javascript mais celle ci ne se lance pas sous IE.
est ce normal?
merci
Version imprimable
Bonjour,
Lorsque que je recois ma réponse ajax, je place le code recu dans ma div.
A l'intérieur du code recu je demande, l'execution d'une fonction javascript mais celle ci ne se lance pas sous IE.
est ce normal?
merci
Salut,
Peux-tu montrer à quoi ressemble ton code?
tu as par exemple un code qui sur un clic change le contenu d'une div:
Voila la code initial de la div:
Tu clique sur ton lien qui va aller chercher avec ajax un fichier phpCode:<div id="test">salut, ta pas encore cliqué</div>
Voila le contenu du fichier php
Ce contenu va se mettre dans la DIV 'test'Code:
1
2 echo '<script type="text/javascript">alert("bien recu");</script> tu as bien cliquer';
Mais je ne vais pas avoir le alert qui va sortir...
pas d'idée?
je pense que c'est un pb commun
merci
Fais voir le code de ta requete Ajax.
Parce que dedans, si tu ne demandes pas l'évaluation de ton retour php, c'est normal que le javascript ne s'exécute pas.
je n'ai pas bien compris si tu voulais la réponse renvoyée par PHP, ou la commande demandée sur le retour par ajax.
J'utilise prototype.
En effet, je me rappel de cette fonction eval.
imaginons la réponse donnée par ajax est:
Et j'ai mon ajax, utilisant la librairie prototype:Code:echo "<script>alert('hello');</script>"
Que dois je faire:Code:
1
2
3
4
5
6 var requete = new Ajax.Updater( 'mondiv', 'ajax.php', { method: 'post', parameters: parametres } );
créer l'évènement onComplete sur le code Ajax, et mettre un eval() javascript sur le retour OU mettre la fonction eval de PHP dans le fichier PHP genre:
Prototype dois avoir ce genre de méthode déja incrémentée non?Code:]echo eval("<script>alert('hello');</script>")[/
Je parlais de la fonction eval de javascript.
Dans la doc de Ajax.Updater, ils spécifient l'option evalScripts pour évaluer le script automatiquement, essaie de la rajouter pour voir.
elle y est par défaut si tu as le bon type mime (header à mettre pr lui dire que c'est du javascript, cf doc Prototype).
Euh ca sert a rien de le mettre dans la div, c'est mieu de le mettre dans un fichier .js à part (arrêtez de mélanger votre code et votre vue boudiou ! :aie:)
Par contre il faut lui dire que tu veux qu'il lance une fonction lors du click. Si tu utilises Prototype, ça devrait donner ça (comme ya pas d'id j'itère sur la class test, seul element distinctif que je peux utiliser de ta div):
Si tu as Firefox + firebug (que je te conseil très très vivement), tu peux aussi faire :Code:
1
2 $$(".test").invoke("observe", function() {alert("bien recu");});
ce qui est beaucoup mieux que les alert car non bloquant!Code:
1
2 $$(".test").invoke("observe", function() {console.debug("bien recu");});
Bah je viens de tester:
Effectivement t'as pas le alert, mais si tu rajoutesCode:
1
2
3
4
5
6
7 var requete = new Ajax.Updater( 'mondiv', 'ajax.php', { method: 'post', parameters: parametres } );
Tu l'as...Code:
1
2
3
4
5
6
7 var requete = new Ajax.Updater( 'mondiv', 'ajax.php', { method: 'post', parameters: parametres, evalScripts : true } );
J'ai essayé le coup de mettre text/javascript dans le header de la réponse, ca a pas marché par contre oO
c'est parceque tu lui a donné du html pas du json:
enleve la balise, gardes que le code.
evalScript c'est fait pour si on utilise du html mélangé a du script (c'est très mal, ça pue et ça pollue) alors il interepretre les balises script comme qd on affiche une page avec du script dedans dans le navigateur directement.
Je te parlais personnellement d'ecrire directement ton JS sous forme JSON, ex:
et non pas comme ça:Code:
1
2
3
4
5
6 { toto:"foo", titi:["bar", "foobar"], tutu: 5 }
ce que tu as du faire ;)Code:
1
2
3
4
5
6
7
8 <script type="text/javascript"> var foobar ={ toto:"foo", titi:["bar", "foobar"], tutu: 5 } </script>
salut peut on utiliser ca sans utiliser le prototype.js parceque pour moi la chaine retourner est ce lui la :
Code:
1
2echo '<script type="text/javascript" src="prototype.js"></script>';