Использование методов PHP в JS через JSON? - PullRequest
0 голосов
/ 04 декабря 2010

У меня есть массив объектов PHP, у которого есть функция getValue, которая получает значение объекта. Итак, если я хочу получить его значение в PHP, я просто:

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

Я передал массив в JS, используя:

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

Если я сделаю

document.write(mapArray);

Я получаю целый массив строк "Object Object". Если я попробую:

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

я получаю "неопределенный".

Почему это происходит? Нужно ли имитировать объект данных PHP, чтобы методы распознавались в JS, или кодировка JSON может помочь мне с этим?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2010

Все json_encode возвращает строку, представляющую ваши данные.

Представьте, что нужно для создания версий JavaScript всех ваших функций PHP. json_encode по сути должен был бы быть компилятором, способным понимать все возможные функции PHP и преобразовывать его в эквивалентные функции JavaScript.

Можно представить, что такая вещь работает для простых функций, но как она может работать для более сложного кода? Если ваша функция getValue вызывает часть PHP-кода вашей библиотеки для установления соединения MySQL, извлечения данных и выполнения вычислений с использованием встроенных функций PHP, которых нет в JavaScript, плохая функция json_encode должна будет по существу преобразовать весь язык PHP в JavaScript.

Нет, все, что вы можете получить в JSON - это данные. Не функциональность.

Для описанного вами конкретного случая, когда у вас есть некоторые личные данные с методом доступа, просто создайте массив (или объект), который описывает фактические данные, которые вы хотите вернуть в браузер, перед вызовом json_encode.

0 голосов
/ 04 декабря 2010

Когда вы сериализуете массив в JSON и передаете его клиенту для оценки с помощью JavaScript, вы можете только передать представление массива и его содержимого (т.е. значения свойств).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...