/ / Ein PHP-Objekt als Argument einer Javascript-Funktion übergeben - PHP, Javascript, Json

Übergabe eines PHP-Objekts als Argument einer Javascript-Funktion - PHP, Javascript, JSON

Meine Suchfähigkeiten scheinen mich zu versagen. Ich habe dieses php-Objekt, das ich aus einem MySQL-Eintrag desialisiert, und ich möchte es als Argument an eine Javascript-Funktion übergeben, damit es das Objekt mit den Werten in einem Formular vergleichen kann. Nach dem Ergebnis meiner Suche hätte das Codieren des Objekts als Json-Objekt den Trick ausgeführt, aber wenn ich einen Json_encode für die Variable mache, führt dies nur zu einem Ergebnis {}.

Hier ist das relevante Codefragment:

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

Ich weiß, dass die PHP-Daten korrekt aus der Datenbank abgerufen werden, da die Werte im Formular alle korrekt initialisiert werden. Erst mit dem letzten HTML-Kommentar wusste ich, dass ich ein leeres Json-Objekt hatte.

Hier ist ein Beispiel von was print_r($data) Rückgabe (sensible Informationen bearbeitet):

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

Mache ich etwas falsch? Ist die Kodierung in JSON in meinem Szenario der richtige Ansatz?

Antworten:

0 für die Antwort № 1

Ihr Objekt enthält nur private Eigenschaften, die nicht von ausgegeben werden json_encode.

Es scheint auch eine Art Rekursion zu geben, was wahrscheinlich bedeutet, dass ein Mitglied jedes Arrays auf das Objekt selbst verweist (oder ähnliches).

Sie müssen einige der Eigenschaften veröffentlichen und wahrscheinlich auch die Rekursionsprobleme beheben.


1 für die Antwort № 2

JSON ist der richtige Weg, dies zu tun. Und im Grunde funktioniert json_encode / json_decode in diesem Fall gut. Wenn ein leeres Objekt zurückgegeben wird, liegt möglicherweise ein Problem mit den Daten vor, die Sie zu kodieren versuchen. Die Funktion erwartet, dass die Daten in utf-8 sind, während PHP selbst noch ISO-8859-1 ist. Wenn Sie also z. Sonderzeichen in einigen Feldern kann es hilfreich sein, wenn Sie diese zuerst mit utf8_encode konvertieren.