Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2011, 17h59   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 2
Points : 2
Par défaut 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
Ben Gates est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 17h50   #2
Membre habitué
 
Homme eric
Étudiant
Inscription : décembre 2010
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme eric

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 103
Points : 100
Points : 100
à tout hasard , ca marcherait peut être si tu appelais explicitement ta fonction retournée (en faisant une fonction avec un nom generique) une fois qu'elle est ratachée au DOM...
utopman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h38.


 
 
 
 
Partenaires

Hébergement Web