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 № 1Twó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.