2017-10-12 55 views
2

我有一個陣列fields包含字符串的列表:通過從哈巴狗(玉)的陣列,以jQuery腳本

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> 

感謝

回答

5

JSON編碼它的把它放在屬性的地方,喜歡上了<script>本身:

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

有可能把它直接插入腳本一些小心逃避¹(JSON編碼是不夠的!),但是當屬性已經可靠地工作時,不值得付出努力。

¹您可以通過JSON-編碼開始,然後使它安全的JavaScript的情況下用\u202[89]替換U + 2028和U + 2029,然後使之安全的HTML背景與\x3c更換<。僅替換</是不夠的,因爲<!--也可能以某種可以想象的方式解析解析。

+0

根據你的回答,這也應該工作:'var fields = JSON.parse(#{JSON.stringify(customerFields)})'? – YouneL

+0

我只通過添加來獲得這項工作:'var fields =!{JSON.stringify(customerFields)}' – YouneL

+3

@younel:這正是我所說的不要做的。這是一個HTML注入(「XSS」)漏洞。 – Ryan