【问题标题】:pass an array from pug (jade) to jquery script将一个数组从哈巴狗(玉)传递给 jquery 脚本
【发布时间】:2018-03-24 07:51:20
【问题描述】:

我有一个数组fields,其中包含一个字符串列表:

var fields = ['foo', 'bar', 'zed'];

我把它从快递传给哈巴狗是这样的:

app.get('/some_route', function(req, res) {

    res.render('some_view', { fields: fields });

});

现在我想在 jquery 脚本中使用该数组, 我已经尝试过了:

<script>
    $( document ).ready(function() {
        var fields = #{fields};
        // return: var fields = foo,bar,zed;
    });
</script>

和:

<script>
    $( document ).ready(function() {
        var fields = JSON.parse(#{fields});
        // return: var fields = JSON.parse(foo,bar,zed);
    });
</script>

谢谢

【问题讨论】:

    标签: javascript jquery express pug


    【解决方案1】:

    对其进行 JSON 编码并将其放入某个属性中,例如 &lt;script&gt; 本身:

    script(id='field-source', data-fields=JSON.stringify(fields)).
        $(document).ready(function () {
            var fields = JSON.parse($('#field-source').data('fields'));
        });
    

    可以通过仔细转义将其直接放入脚本中¹(JSON 编码是不够的!),但当属性已经如此可靠地工作时,不值得付出努力。

    ¹您从 JSON 编码开始,然后通过将 U+2028 和 U+2029 替换为 \u202[89] 使其对 JavaScript 上下文安全,然后通过将 &lt; 替换为使其对 HTML 上下文安全\x3c。仅替换 &lt;/ 是不够的,因为 &lt;!-- 还会以某些可行的方式混淆解析。

    【讨论】:

    • 根据您的回答,这也应该有效:` var fields = JSON.parse(#{JSON.stringify(customerFields)}) ` ?
    • 我只需添加:` var fields = !{JSON.stringify(customerFields)} `
    • @younel:这正是我说不要做的。这是一个 HTML 注入(“XSS”)漏洞。
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2018-09-15
    相关资源
    最近更新 更多