2017-10-12 4 views
2

I ein Array fields haben, die eine Liste von Zeichenketten enthalten:ein Array von Mops (Jade) passieren zu jquery Skript

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

ich es passieren von Eil wie dies an PUG:

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

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

}); 

jetzt möchte ich das Array innerhalb jquery Skript verwenden, ich schon versuchen:

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

und:

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

dank

Antwort

5

JSON codieren es eine Put es in einem Attribut irgendwo, wie auf der <script> selbst:

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

Es ist möglich, es in das Skript direkt setzen mit etwas vorsichtiges Entkommen¹ (JSON-Kodierung ist nicht genug!), aber die Mühe lohnt sich nicht, wenn Attribute schon so zuverlässig funktionieren.

¹ Sie von JSON-Codierung zu starten, es dann für den JavaScript-Kontext sicher machen durch Ersetzen U + 2028 und U + 2029 mit \u202[89], dann ist es für den HTML-Kontext sicher machen durch < mit \x3c ersetzen. Ersetzen nur </ ist nicht genug, wie <!-- kann auch mit Parsing in gewissen erdenklichen Weisen verwirren.

+0

auf Ihrer Antwort auch dies sollte funktionieren: 'var fields = JSON.parse (# {JSON.stringify (customerFields)})'? – YouneL

+0

ich diese Arbeit nur hinzufügen: 'var fields = {JSON.stringify (customerFields)}' – YouneL

+3

@younel: Das ist genau das, was ich sagte, nicht zu tun. Es ist eine HTML-Injektion ("XSS") Schwachstelle. – Ryan

Verwandte Themen