2010-12-04 6 views
0

J'ai un tableau PHP d'objets qui ont une fonction, getValue qui obtient la valeur de l'objet. Donc, si je veux l'obtenir est la valeur en PHP je viens:Utilisation de méthodes PHP dans JS via JSON?

echo mapArray[2][2]->getValue; 

je suis passé le tableau à JS en utilisant:

var mapArray = <?php echo json_encode($mapArray); ?> 

Si je fais un

document.write(mapArray); 

je reçois un tableau entier de chaînes "Object Object". Si j'essaie:

document.write(mapArray.[2][2].getValue); 

Je reçois "non défini".

Pourquoi cela se produit-il? Dois-je imiter l'objet de données PHP pour que les méthodes soient reconnues dans JS ou l'encodage JSON peut-il me donner un coup de main?

+0

Quel est le résultat rendu de votre deuxième bloc de code? Celui avec le bit PHP dedans? –

+0

Je suppose que dans votre premier bloc de code, vous vouliez dire 'mapArray [2] [2] -> getValue()'. Si 'getValue' est une propriété simple, et non une méthode, le reste de la question n'a pas de sens. – VoteyDisciple

Répondre

4

Tout json_encode est de retourner une chaîne représentant vos données. Imaginez ce qu'il faudrait pour créer des versions JavaScript de toutes vos fonctions PHP. json_encode devrait essentiellement être un compilateur, capable de comprendre toutes les fonctionnalités PHP possibles et de les convertir en fonctionnalités JavaScript équivalentes.

Il est possible d'imaginer une telle chose fonctionner pour des fonctions simples, mais comment cela pourrait-il fonctionner pour un code plus élaboré? Si votre fonction getValue invoque du code PHP de votre bibliothèque pour établir une connexion MySQL, extraire des données et effectuer des calculs à l'aide de fonctions PHP intégrées qui n'existent pas en JavaScript, la fonction json_encode pauvre devrait essentiellement convertir tout le langage PHP en JavaScript.

Non, tout ce que vous pouvez obtenir en JSON, ce sont les données. Pas de fonctionnalité. Pour le cas spécifique que vous avez décrit, où vous avez des données privées avec une méthode d'accesseur, créez simplement un tableau (ou un objet) qui décrit les données que vous voulez retourner au navigateur avant d'appeler json_encode.

+0

Merci pour l'explication. –

0

Lorsque vous sérialisez le tableau en JSON et que vous le transmettez au client pour évaluation avec JavaScript, vous ne pouvez transmettre que la représentation du tableau et son contenu (c'est-à-dire les valeurs de propriété).