2 回答
TA贡献1802条经验 获得超5个赞
您当然需要将数组编码为 JSON,以便 JavaScript 客户端可以使用它。
正如您所提到的,您的数组中有特定类的实例,因此简单的 JSON 编码肯定无法正常工作。
这里,PHP自带了JsonSerializable
接口。您必须在您的类上实现此接口。让我们举个Foo
例子:
class Foo implements JsonSerializable
{
private $thing;
public function __construct($thing)
{
$this->thing = $thing;
}
public function jsonSerialize()
{
return [
'thing' => $this->thing,
];
}
}
这是上述代码片段的示例。如您所见,现在您可以创建 的实例Foo,将其嵌入到数组或其他内容中,并使用您自己的表示形式对其进行 JSON 编码:
$foo = new Foo('something');
echo json_encode(['foo' => $foo]);
// {"foo": {"thing": "something"}}
将其输出到内联 JavaScript 块中的工作方式与您编写的类似:
<script type="application/javascript">
const obj = "<?php echo json_encode(($_SESSION['objArray'])) ?>;";
</script>
TA贡献1909条经验 获得超7个赞
将 php 数组存储到 javascript 变量中,
示例值:( 内部示例数组$_SESSION['objArray'])
$_SESSION['objArray'] = array(
'name' => 'foo',
'email' => 'foo@gmail.com',
'age' => 30
);
将对象转换为数组:(可选)(如果里面有对象值$_SESSION['objArray'])
$_SESSION['objArray'] = json_decode(json_encode($_SESSION['objArray']), true);
解决方案:( 分配给javascript变量objArray)
<script>
const objArray = "<?php echo json_encode($_SESSION['objArray']); ?>";
console.log(objArray);
</script>
控制台输出:
{"name":"foo","email":"foo@gmail.com","age":30}
说明: json_encode函数会将数组转换为json字符串,JavaScript 会将其视为字符串,并且在赋值时需要用引号将其'或覆盖"。
希望这有帮助。
- 2 回答
- 0 关注
- 143 浏览
添加回答
举报