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
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
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 php
Code : Sélectionner tout - Visualiser dans une fenêtre à part <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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...
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 : Sélectionner tout - Visualiser dans une fenêtre à part echo "<script>alert('hello');</script>"
Que dois je faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part ]echo eval("<script>alert('hello');</script>")[/
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 !)
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $$(".test").invoke("observe", function() {alert("bien recu");});
ce qui est beaucoup mieux que les alert car non bloquant!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $$(".test").invoke("observe", function() {console.debug("bien recu");});
Bah je viens de tester:
Effectivement t'as pas le alert, mais si tu rajoutes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var requete = new Ajax.Updater( 'mondiv', 'ajax.php', { method: 'post', parameters: parametres } );
Tu l'as...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 { toto:"foo", titi:["bar", "foobar"], tutu: 5 }
ce que tu as du faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <script type="text/javascript"> var foobar ={ toto:"foo", titi:["bar", "foobar"], tutu: 5 } </script>![]()
Partager