将JSON数据从php传递到html-data属性,然后传递给Javascript

Kan*_*nav 26 html javascript php jquery json

我正在创建一个插件,用户data-在HTML中添加属性中的自定义设置.设置采用JSON格式.我在Javascript中使用这些设置.

它有preview,basepaths属性.previewbase具有字符串值,但是paths是一个path对象数组.

当我直接在HTML中添加JSON设置时,它工作正常:

<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}]"}'>
Run Code Online (Sandbox Code Playgroud)

我使用data('Params')jQuery的方法得到这个值.它的类型是object.

现在,当我尝试json_encode使用php数组并将其传递给它时data-,它已成功添加

<div data-side="front" data-params=<?php echo "'".json_encode($dataParams)."'"; ?>>
Run Code Online (Sandbox Code Playgroud)

但现在data('Params')Javascript中的typeof 是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

        )

)
Run Code Online (Sandbox Code Playgroud)

那么,如果我包含paths密钥,它为什么会将其类型更改为字符串?有什么方法可以解决吗?

编辑:

这是输出:

产量

Ren*_*rss 59

您需要转义数据并处理特殊字符.

<div data-side="front" data-params="<?php echo htmlspecialchars(json_encode($dataParams), ENT_QUOTES, 'UTF-8'); ?>">
Run Code Online (Sandbox Code Playgroud)

并使用jQuery获取它:

$('[data-side="front"]').data('params'); // object
Run Code Online (Sandbox Code Playgroud)