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

将PHP对象作为javascript函数的参数传递,php,javascript,json,Php,Javascript,Json,我的搜索技能似乎让我失望了。我有一个从mysql条目中取消序列化的php对象,我想将其作为参数传递给javascript函数,以便它可以将对象与表单中的值进行比较。根据我从搜索中收集到的信息,将对象编码为json对象就可以了,但是当我对变量进行json_编码时,它只会产生{} 以下是相关的代码片段: <?php $data = new Data(); $data = unserialize(base64_decode($rawdata));//Where $rawdata is the d

我的搜索技能似乎让我失望了。我有一个从mysql条目中取消序列化的php对象,我想将其作为参数传递给javascript函数,以便它可以将对象与表单中的值进行比较。根据我从搜索中收集到的信息,将对象编码为json对象就可以了,但是当我对变量进行json_编码时,它只会产生
{}

以下是相关的代码片段:

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

我做错什么了吗?在我的场景中,编码为JSON是正确的方法吗?

您的对象只包含私有属性,而不会由
JSON\u encode
输出

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


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

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

打印($data)会产生什么结果?@Pekka,我用打印结果编辑了我的问题。为什么要使用onsubmit和onclick来实现相同的目的,即compareEntry()@boota:通过单击按钮并按enter键来确保完成相同的操作。我在很多问题上都看到了这一点。我应该采取不同的做法吗?如果我需要我的财产保持私有,因为我不希望通过使用财产的名称来访问和更改它们,该怎么办?我是否应该获取用于初始化表单的提取值并从中创建新对象?如果是这样的话,我应该让它成为一个php对象,还是可以直接用它构建一个json对象?也许是另一种“数据容器”?我应该编辑OP中的所有这些问题吗?@Eldros我将创建一个单独的
STDClass
对象,向其添加值,并
json\u encode()
该对象。还可以阅读关于\u toString()方法的内容。这可能对你有帮助。PHP.net链接
(
    [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