envoyer un objet de php vers ajax

Invité
Invité n'ayant pas de compte PHPfrance

14 sept. 2006, 08:28

Salut,

je me demandais s'il était possible, lors d'un appel ajax, que le traitement renvoie un objet interprétable en javascript ? Ca serait quand meme le bonheur...

Par exemple que ma fonction php retour un truc du type :
$oRetour = "{ maVar1:".$maVar1.", maVar2:".$maVar2." }";
est en en js je puis faire un truc du type :
var oRetour = {};
oRetour = xmlhhtp.responseText;
le problème c'est que bien entendu je recois le tout sous un type String et pas Objet, le but étant de ne pas devoir faire une fonction de désérialisation bien entendu, ni dez passer par un split...

Enfin voila c'était la question du matin avant d'aller travailler...

Mertci d'avance pour vos réponses

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 sept. 2006, 09:50

Tu pourrais éventuellement retourner du code javascript (sous forme de chaine texte) dont tu n'aurais qu'à faire un eval() pour pouvoir l'exploiter directement ?

A toi ensuite de prévoir le code js pour que celui-ci génère un objet renseigné lorsqu'il sera evalué :)

ben
Eléphanteau du PHP | 10 Messages

14 sept. 2006, 20:47

Désolé, je viens de voir que je ne m'étais pas connecté, j'ai poste en tant qu'invité...

Bref, j'avais déjà tenté de faire un eval de la chaine :
$oRetour = "{ maVar1:".$maVar1.", maVar2:".$maVar2." }"; 
mais ca ne passe malheureusement pas.

Si qqn à une solution je suis preneur...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 sept. 2006, 22:53

Vi mais c'est du php, pas du javascript que tu évalues dans ce cas et tu ne peux pas utiliser de php dans une page déjà chargée.
Si tu veux passer un objet ou un tableau en ajax pour l'utiliser côté client, il faut que ce soit un tableau javascript. A toi de renvoyer le code adéquat dans ton script php :)

ben
Eléphanteau du PHP | 10 Messages

15 sept. 2006, 08:13

Saut,

je sais que pour un tableau ça marche, par exemple :
$aRetour = "['var1', 'var2', 'var3']";
va fonctionner sans problème, mais ma question portait sur le fait de renvoyer un objet sans passer par un tableau.

Par contre merci pour ta réponse, car tu m'as mis sur une bonne piste, celle du tableau d'objets, genre si je fais :
$aRetour = "['var1', {a:1}, 'var3']";
La case [1] de mon tableau sera bien de type Object, ce qui ouvre déjà plus de possibilités, mais je trouve quand meme bizarre le fait de ne pouvoir envoyer un Object sans passer par une case de tableau.

Mammouth du PHP | 19672 Messages

15 sept. 2006, 08:17

Le problème global : tu veux envoyer depuis le serveur un objet vers le client : or soit tu envoies un objet JavaScript soit tu envoies un objet PHP. Dans les deux cas ça va coincer puisque le JavaScript est interprété coté client, donc le serveur ne pourra pas construire un objet en JavaScript, et si tu envoies un objet PHP, le client ne pourra rien en faire parce qu'il ne saura pas l'interpréter.

Donc personnellement, j'ai un peu de mal à comprendre ce que tu veux faire au juste... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

15 sept. 2006, 10:37

Ce qui est sûr c'est que tu dois envoyer un objet sérialisé au format javascript avec (et c'est obligatoire) la classe pour le réanimer.

Peut être la clé de voute est de savoir si on peut désérialiser l'objet envoyé côté javascript (et je pense que c'est possible si tu envois aussi à javascript la classe de l'objet sérialisé) :roll:

Bien sûr tu dois envoyer tout ça sous forme de chaîne à Ajax qui doit faire un eval() pour exécuter à chaud le code de désérialisation
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 19672 Messages

15 sept. 2006, 10:59

Peut être la clé de voute est de savoir si on peut désérialiser l'objet envoyé côté javascript (et je pense que c'est possible si tu envois aussi à javascript la classe de l'objet sérialisé) :roll:
C'est tout à fait possible et le script est même disponible, voir cet article sur aidejavascript.com : à noter, c'est précisément ce script qui est utilisé dans le tuto de la FAQ sur les listes déroulantes liées PHP+JavaScript de la FAQ

L'idée consiste à prendre un tableau sérialisé en PHP et à le transformer en tableau JavaScript. :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

15 sept. 2006, 11:41

Cyrano +1 :pouce:
Mais notre ami parle de transmission d'objet (données et méthodes) et non simplement d'une source de données.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène