2011-06-15 81 views
18

我在php中有对象,每个对象表示一个“item”以及与它相关的所有信息。将PHP对象传递给javascript

而当用户浏览页面时,应将这些对象传递给javascript。理想情况下,镜像相同的结构,所以我可以使用Raphael在我的网站上以单独的形状显示每个项目及其信息。

但是,你如何获得从PHP到JavaScript的对象?

回答

30

您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScript解码。下面是一些基本步骤:

  1. Convert PHP的对象阵列。使用json_encode()编码该PHP数组。使用JSON.parse或者您可以使用jQuery.parseJSON

  2. Pass JSON编码的数据PHP

  3. 解码JSON在JavaScript中。

这是一篇有关传递JavaScript object to a PHP object的有趣教程。您可能会通过观看其他特色/相关视频发现它很有用。

希望这会有所帮助。

+6

'的eval()'是邪恶的。除非你无法提供帮助,否则不要使用它,特别是不要将它用于不可信的数据! – Bobby 2013-06-12 09:56:43

+0

事实上,eval()是一个危险的方法来调用,而且,如果对象很大,处理起来可能会很慢。如果你忽略它的存在会更好,因为在大多数情况下,如果你需要将它用于真正的目的,那是因为你有一个架构问题。 – RPDeshaies 2014-02-21 13:43:57

+0

最佳答案!像魅力一样工作 – 2017-05-27 17:11:01

1

您将使用JSON对PHP对象进行编码,以便可以通过Javascript访问它们。具体怎么做取决于你的应用程序。

为此,PHP具有json_encode和json_decode函数。

6

我用这个:

<script> 
var js_data = '<?php echo json_encode($php_data); ?>'; 
var js_obj_data = JSON.parse(js_data); 
</script> 

$ php_data可自从简单数组对象的数组。

13

迟到的答案,但我很惊讶没有人提到什么,可以说是部署此功能的“正确”方式。

在您的对象上实现JsonSerializable接口。该接口定义了一个抽象方法,jsonSerialize。该方法应该返回对象的数组表示形式。

当您尝试在对象上使用json_encode时,将调用jsonSerialize。您可以将此接口视为特定于本机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

文档

+0

可能是最好的方式去做。 – designcise 2014-07-02 00:28:13