将PHP对象传递给javascript

Wil*_*ham 23 javascript php object

我在php中有对象,每个对象代表一个"项目"以及与之关联的所有信息.

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

但是,如何从php获取对象到javascript?

小智 38

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

  1. PHP对象转换为数组.

  2. 使用json_encode()以编码PHP阵列.

  3. JSON编码的数据传递给PHP

  4. 使用JavaScript解码JSON,JSON.parse或者您可以使用它jQuery.parseJSON来执行此操作.

这是一个关于将JavaScript对象传递给PHP对象的有趣教程.通过观看其他精选/相关视频,您可能会发现它很有用.

希望这可以帮助.

  • `eval()`是邪恶的.除非你无法帮助它,否则不要使用它,特别是不要在不受信任的数据上使用它! (6认同)

Chr*_*ker 20

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

在对象上实现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"}
Run Code Online (Sandbox Code Playgroud)

当我在我的项目中实现它时,我通常toArray在对象中放置一个方法,生成数组,并且我jsonSerialize使用它:

public function jsonSerialize () { return $this->toArray(); }

...这样我也可以使用数组形式,如果我这样选择的话.如果您要实现对象序列化,这也很方便__sleep

文档


dlo*_*lez 14

我用这个:

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

$ php_data可以是从简单数组到对象数组.

  • `$php_data['foo'] = "'";` 和 `$php_data['foo'] = '"';` 会给你带来问题。 `Uncaught SyntaxError: Unexpected string in JSON at location`。为什么不 `var js_data = &lt;?php echo json_encode($php_data); ?&gt;;` 并跳过 JSON.parse ? (2认同)