2010-11-24 143 views
0

我的搜索技巧似乎让我失望了。我有这个php对象,我从一个mysql条目反序列化,并且我想将它作为参数传递给一个javascript函数,因此它可以将该对象与表单中的值进行比较。从我的搜索中收集到的信息,将对象编码为json对象已经成功了,但是当我在变量上执行json_encode时,它只会导致{}传递一个PHP对象作为javascript函数的参数

这里是代码中的相关片段:

<?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在我的方案中正确的方法?

+1

'print_r($ data)`结果是什么? – 2010-11-24 10:10:07

+0

@Pekka,我用print_r结果编辑了我的问题。 – Eldros 2010-11-24 10:18:49

回答

0

您的对象仅包含私有属性,不会由json_encode输出。

此外,似乎有某种递归正在进行,可能意味着每个数组的成员引用对象本身(或类似的东西)。

您将需要公开某些属性,并且可能还需要修复递归问题。

1

JSON是正确的方法。基本上json_encode/json_decode在这种情况下运行良好。如果它返回一个空对象,那么您尝试编码的数据可能有问题。该函数期望数据使用UTF-8,而PHP本身仍然是ISO-8859-1。所以如果你有如果你先用utf8_encode转换这些特殊字符,可能会有所帮助。

相关问题