将一个数组从帕格(jade)传递给jquery脚本

You*_*neL 3 javascript jquery express pug

我有一个fields包含字符串列表的数组:

var fields = ['foo', 'bar', 'zed'];
Run Code Online (Sandbox Code Playgroud)

我把它从像这样的快递传递到哈巴狗:

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

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

});
Run Code Online (Sandbox Code Playgroud)

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

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

和:

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

谢谢

Ry-*_*Ry- 5

JSON编码把它放在某个属性的某个地方,比如<script>它自己:

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

可以通过一些小心的转义¹直接将它放入脚本中(JSON编码是不够的!),但是当属性已经可靠地工作时,不值得努力.

¹您可以通过JSON-编码开始,然后使它安全的JavaScript的情况下用替换U + 2028和U + 2029 \u202[89],然后使其可安全地用于替换HTML语境<\x3c.仅替换</是不够的,因为<!--也可能以某些可以想象的方式解析.

  • @younel:这正是我所说的不做的事.这是一个HTML注入("XSS")漏洞. (3认同)