我在php中有对象,每个对象代表一个“项目”以及与之关联的所有信息。
当用户浏览页面时,这些对象应该传递给javascript。理想情况下,镜像相同的结构,所以我可以使用Raphael在我的网站上将每个项目及其信息显示为单独的形状。
但是,如何从php获取对象到javascript?
答案 0 :(得分:37)
您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScript解码。以下是一些基本步骤:
Convert PHP对象到数组。
使用json_encode()
对该PHP数组进行编码。
Pass JSON编码的数据到PHP
使用JSON.parse
从JavaScript解码JSON,或者您可以使用jQuery.parseJSON
来执行此操作。
这是一篇关于传递JavaScript object to a PHP object的有趣教程。通过观看其他精选/相关视频,您可能会发现它很有用。
希望这有帮助。
答案 1 :(得分:19)
迟到的答案,但我很惊讶没有人提到可以说是部署此功能的“正确”方式。
在您的对象上实现JsonSerializable界面。该接口定义了一个抽象方法jsonSerialize
。该方法应该返回对象的数组表示。
当您尝试在对象上使用jsonSerialize
时,将调用json_encode
。您可以将此接口视为特定于本机JSON编码函数的一种“魔术方法”,相当于字符串的__toString
。
将其置于行动中,您有一个如下所示的对象:
class MyFoo implements JsonSerializable {
public $bar = 'hello';
public $baz = 'world';
public function jsonSerialize () {
return array(
'bar'=>$this->bar,
'baz'=>$this->baz
);
}
}
$myFooInstance= new MyFoo();
echo json_encode($myFooInstance); // {"bar":"hello","baz":"world"}
当我在我的项目中实现它时,我通常在对象中放置一个toArray
方法,生成数组,我jsonSerialize
使用它:
public function jsonSerialize () { return $this->toArray(); }
...这样我也可以使用数组表单,如果我这样选择的话。如果您要使用__sleep
<强>文档强>
JsonSerializable
- http://php.net/manual/en/class.jsonserializable.php json_encode
- http://php.net/manual/en/function.json-encode.php 答案 2 :(得分:14)
我用这个:
<script>
var js_data = '<?php echo json_encode($php_data); ?>';
var js_obj_data = JSON.parse(js_data );
</script>
$ php_data可以是简单数组到对象数组。
答案 3 :(得分:3)
您将使用JSON对PHP对象进行编码,以便Javascript可以访问它们。有关如何执行此操作的详细信息取决于您的应用程序。
为此目的,PHP具有json_encode和json_decode函数。