Evaluer du script contenu dans une chaîne JSON
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:
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:
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:
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:
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