Bonjour,
Je vous explique mon problème.
Avant, j'utilisais Prototype et Ajax.Request afin de modifier le contenu d'un DIV, avec comme spécificité d'évaluer les scripts contenus dans le HTML renvoyé.
Exemple (simplifié pour le besoin de ce post) :
Fichier HTML principal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <script language="Javascript"> function ModifierleDiv(DivId) { RequeteAjax = new Ajax.Request('Mon_URL_Ajax.php', { method: 'get', evalScripts: true, onSuccess: function(transport) { Resultat = transport.responseText // Chaîne $(DivId).innerHTML = Resultat; } }); } </script>
Fichier PHP Ajax :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <? $Resultat = 'Youplaboum'; $Resultat .= '<script language="Javascript"> alert("Requete OK !"); </script>'; echo $Resultat; exit(); ?>
=> Le résultat obtenu était le suivant :
- Le DIV passé en paramètre à la fonction ModifierLeDiv() était modifié
- Le script contenu dans la réponse AJAX était évalué et faisait un alert('Requete OK !');
Bon, comme vous vous en doutez, ce n'est pas mon vrai script, c'est simplifié au possible, et si tout était aussi simple, j'aurais placé mon alert() directement dans le onSuccess au lieu de le faire évaluer
Si j'ai besoin d'évaluer mes scripts une fois la réponse parvenue, c'est pour plusieurs raisons, que je ne vais pas détailler.
Bref. Ca, ça marche très bien.
Là où ça se corse, c'est quand j'ai voulu modifier plusieurs DIV avec une seule et même requête AJAX. Du coup, on utilise JSON !
Fichier HTML principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <script language="Javascript"> function ModifierlesDiv(Div1, Div2, Div3) { RequeteAjax = new Ajax.Request('Mon_URL_Ajax.php', { method: 'get', evalScripts: true, onSuccess: function(transport) { json = transport.responseText.evalJSON(true); // Json $(Div1).innerHTML = json.Div1; $(Div2).innerHTML = json.Div2; $(Div3).innerHTML = json.Div3; } }); } </script>
Fichier PHP Ajax :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <? $Resultat['Div1'] = 'Youplaboum'; $Resultat['Div2'] = 'Developpez.net rocks du poney'; $Resultat['Div3'] .= 'Le général est arrivé à pied par la Chine. <script language="Javascript"> alert("Contrepétrie inside"); </script>'; echo json_encode($Resultat); exit(); ?>
Résultat obtenu :
- Les 3 DIVs se mettent bien à jour
- En revanche, le javascript encapsulé dans le JSON ne s'évalue pas, je n'ai pas mon alert(). Remplacer $(Div3).innerHTML = json.Div3; par $(Div3).innerHTML = json.Div3.eval() n'y change rien...;
La question à 100 balles : Savez-vous comment évaluer du script contenu dans une chaîne JSON ?
Merci d'avance !!
Ben
Partager