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