/ / Przekazywanie obiektu PHP jako argumentu funkcji javascript - php, javascript, json

Przekazanie obiektu PHP jako argumentu funkcji javascript - php, javascript, json

Wydaje mi się, że moje umiejętności poszukiwania mnie zawiodły. Mam ten obiekt php, który unserialize z wpisu mysql i chcę przekazać go jako argument funkcji javascript, aby mógł on porównać obiekt z wartościami w formularzu. Z tego, co zebrałem z moich poszukiwań, kodowanie obiektu jako obiektu jsona mogłoby to załatwić, ale kiedy robię kod json_encode w zmiennej, skutkuje to tylko {}.

Oto odpowiedni fragment kodu:

<?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)?>-->

Wiem, że dane php są poprawnie pobierane z bazy danych, ponieważ wszystkie wartości w formularzu są poprawnie zainicjowane. Dopiero z ostatnim komentarzem HTML dowiedziałem się, że mam pusty obiekt json.

Oto przykład tego print_r($data) zwroty (edytowane informacje poufne):

(
[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

Czy robię coś źle? Czy kodowanie do JSON jest właściwym podejściem w moim scenariuszu?

Odpowiedzi:

0 dla odpowiedzi № 1

Twój obiekt zawiera tylko prywatne właściwości, które nie będą mogły być wyprowadzone przez json_encode.

Wydaje się również, że zachodzi jakiś rodzaj rekurencji, prawdopodobnie oznaczający, że element każdej tablicy odwołuje się do samego obiektu (lub czegoś podobnego).

Musisz upublicznić niektóre właściwości i prawdopodobnie również rozwiązać problemy z rekursją.


1 dla odpowiedzi nr 2

JSON to właściwy sposób, aby to zrobić. W tym przypadku w zasadzie json_encode / json_decode działa dobrze. Jeśli zwróci pusty obiekt, może wystąpić problem z danymi, które próbujesz zakodować. funkcja oczekuje, że dane znajdą się w utf-8, podczas gdy sam PHP jest nadal ISO-8859-1. Więc jeśli masz np. znaki specjalne w niektórych polach może pomóc, jeśli przekonwertujesz je najpierw za pomocą utf8_encode.