Передача объекта PHP в качестве аргумента функции JavaScript - PullRequest
0 голосов
/ 24 ноября 2010

Кажется, мои навыки поиска подвели меня.У меня есть этот объект php, который я сериализую из записи mysql, и я хочу передать его в качестве аргумента функции javascript, чтобы он мог сравнивать объект со значениями в форме.Из того, что я понял из моего поиска, кодирование объекта как объекта json могло бы помочь, но когда я делаю код json_encode для переменной, это приводит только к {}.

Вотсоответствующий фрагмент кода:

<?php
$data = new Data();
$data = unserialize(base64_decode($rawdata));//Where $rawdata is the data retrieved from the mysql query.
/* using function such as $data->getName() to retrieve the relevant data */
?>

<form id="myform" action="#" method="post" onsubmit="compareEntry(<?=json_encode($data)?>)">

<!-- Different input and select field initialized with the php data -->

<input type="submit" onclick="compareEntry(<?=json_encode($data)?>)"/>
</form>
<!--<?=json_encode($data)?>--> 

Я знаю, что данные php правильно извлекаются из базы данных, поскольку значения в форме все правильно инициализированы.Только с последним html-комментарием я узнал, что у меня пустой объект json.

Вот пример того, что print_r($data) возвращает (измененная конфиденциальная информация):

(
    [m_path:private] => 
    [m_version:private] => REL_54
    [m_bugs:private] => Array
 *RECURSION*
    [m_targets:private] => Array
 *RECURSION*
    [m_symptoms:private] => Array
 *RECURSION*
    [m_exception:private] => Array
 *RECURSION*
    [m_instruction:private] => Array
 *RECURSION*
    [m_sources:private] => Array
 *RECURSION*
    [m_risks:private] => Array
 *RECURSION*
    [m_test:private] => Array
 *RECURSION*
    [m_contact:private] => Array
 *RECURSION*
)
1

Делатьсделать что-то не так?Является ли кодирование в JSON правильным подходом в моем сценарии?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

JSON - правильный способ сделать это.И в основном json_encode / json_decode хорошо работает в этом случае.Если он возвращает пустой объект, возможно, есть проблема с данными, которые вы пытаетесь кодировать.функция ожидает, что данные будут в UTF-8, в то время как сам PHP по-прежнему ISO-8859-1.Поэтому, если у вас есть, например, специальные символы в некоторых полях, это может помочь, если вы сначала преобразуете их с помощью utf8_encode.

0 голосов
/ 24 ноября 2010

Ваш объект содержит только частные свойства, которые не будут выводиться json_encode.

Кроме того, похоже, что происходит какая-то рекурсия, вероятно, означающая, что член каждого массива ссылается насам объект (или что-то подобное).

Вам нужно будет сделать некоторые свойства общедоступными и, возможно, также исправить проблемы с рекурсией.

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