<div>
var arrayContent='<%= myJsonArray %>'
<!--myJsonArray is sent to this ejs file using the render function in
index.js while rendering this ejs file -->
</div>
<script>
var index=0;
function myfunc(){
console.log(arrayContent); /*[object Object],[object Object],[object
Object],[object Object] */
var arrContentJson= JSON.parse(arrayContent);
console.log(arrContentJson[index]); /* Uncaught SyntaxError: Unexpected
token o in JSON at position 1 */
}
</script>
Почему я не могу получить доступ к содержимому анализируемого массива Json (arrContentJson). Как я могу получить к нему доступ?
Похоже, вы хотите передать массив из ejs в код javascript внутри <script>
, чтобы сделать это, вы должны использовать неэкранированную интерполяцию <%- %>
:
<script>
var arrayContent= <%- JSON.stringify(myJsonArray) %>;
var index=0;
function myfunc(){
console.log(arrayContent);
var arrContentJson= JSON.parse(arrayContent);
console.log(arrContentJson[index]);
}
myfunc();
</script>
Возможно, '<%= myJsonArray %>'
одинарные кавычки вокруг '<%= myJsonArray %>'
будут работать, но, похоже, вы разбираете уже действующий json. console.log(arrayContent[0])
.
myJsonArray
- это, вероятно, массив, а не JSON, представляющий массив. (У вас также есть теги<div>
здесь вместо<script>
.) Однако небезопасно помещать произвольный JSON непосредственно в теги<script>
; вам нужно использовать экранирование, специально разработанное для этой цели. (Если вы реализуете это, вы должны проверить, что он работает, убедившись, что<
экранировано как\x3c
.)