【发布时间】:2015-12-25 13:17:53
【问题描述】:
我正在创建一个插件,用户在其中添加自定义设置在 HTML 中的 data- 属性中。设置为 JSON 格式。我在 Javascript 中使用这些设置。
它有preview、base 和paths 属性。 preview 和 base 具有字符串值,但 paths 是 path 对象的数组。
当我将 JSON 设置直接添加到 HTML 中时效果很好:
<div data-side="front" data-params='{"preview": "assets/img/products/tshirt/front-preview.png", "base": "assets/img/products/tshirt/front-base.png", "paths": "[{\"name\": \"base\", \"path\": \"M 324.00,33.00 C 324.00,33.00\", \"x\": 92, \"y\": 16, \"height\": 370}, {\"name\": \"collar\", \"path\": \"M 358.00,46.10 C 358.00,46.10\", \"x\": 170, \"y\": 17, \"height\": 21}, {\"name\": \"leftSleeve\", \"path\": \"M 633.17,170.00 C 633.17,170.00\", \"x\": 288, \"y\": 66, \"height\": 131}, {\"name\": \"leftCuff\", \"path\": \"M 595.00,438.00 C 615.47,438.23\", \"x\": 293, \"y\": 172, \"height\": 33}, {\"name\": \"rightSleeve\", \"path\": \"M 142.00,140.00 C 143.46,150.28\", \"x\": 47, \"y\": 64, \"height\": 131}, {\"name\": \"rightCuff\", \"path\": \"M 48.00,375.38 C 48.00,375.38 95.00\", \"x\": 41, \"y\": 166, \"height\": 36}]"}'>
我使用 jQuery 的 data('Params') 方法获取此值。它的类型是object。
现在,当我尝试 json_encode 一个 php 数组并将其传递给 data- 时,它已成功添加
<div data-side="front" data-params=<?php echo "'".json_encode($dataParams)."'"; ?>>
但是现在 Javascript 中的 typeof data('Params') 是 string。所以,我收到一个 JSON 解析错误。如果我删除 paths 键,它的类型会更改为对象。
这是我正在编码的数组的print_r:
Array
(
[preview] => assets/img/products/tshirt/front-preview.png
[base] => assets/img/products/tshirt/front-base.png
[paths] => Array
(
[0] => Array
(
[name] => base
[path] => M 324.00,33.00 C 324.00,33.00
[x] => 92
[y] => 16
[height] => 370
)
... and more path arrays
)
)
那么,如果我包含paths 键,为什么它会将其类型更改为字符串?有什么办法解决吗?
编辑:
这是输出:
【问题讨论】:
-
你检查过
json_encode的输出吗?和你直接插入一样吗? -
编辑了我的问题。添加输出
-
你有什么函数可以将 json 编码的结果放入 html 实体中吗?我认为默认情况下 json 编码不会将引号放入其等效的 html 实体中
-
@Rene Korss 用双引号包裹 php 代码会破坏 json,因为我猜 json 也有双引号。
-
哦。正确的。试试单引号?
标签: javascript php jquery html json