我的搜索技巧似乎让我失望了。我有这个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是正确的方法吗?
答案 0 :(得分:1)
JSON是正确的方法。基本上json_encode / json_decode在这种情况下效果很好。如果它返回一个空对象,则可能是您要编码的数据存在问题。该函数期望数据为UTF-8,而PHP本身仍为ISO-8859-1。所以如果你有例如如果使用utf8_encode首先转换它们,某些字段中的特殊字符可能会有所帮助。
答案 1 :(得分:0)
您的对象仅包含json_encode
不会输出的私有属性。
此外,似乎存在某种递归,可能意味着每个数组的成员正在引用对象本身(或类似的东西)。
您需要公开一些属性,并且还可能修复递归问题。