传递PHP对象作为javascript函数的参数

时间:2010-11-24 10:08:32

标签: php javascript json

我的搜索技巧似乎让我失望了。我有这个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是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

JSON是正确的方法。基本上json_encode / json_decode在这种情况下效果很好。如果它返回一个空对象,则可能是您要编码的数据存在问题。该函数期望数据为UTF-8,而PHP本身仍为ISO-8859-1。所以如果你有例如如果使用utf8_encode首先转换它们,某些字段中的特殊字符可能会有所帮助。

答案 1 :(得分:0)

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

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

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