Невозможно получить доступ к элементам массива json, объявленным в EJS внутри тегов скрипта Javascript

1
<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). Как я могу получить к нему доступ?

  • 1
    myJsonArray - это, вероятно, массив, а не JSON, представляющий массив. (У вас также есть теги <div> здесь вместо <script> .) Однако небезопасно помещать произвольный JSON непосредственно в теги <script> ; вам нужно использовать экранирование, специально разработанное для этой цели. (Если вы реализуете это, вы должны проверить, что он работает, убедившись, что < экранировано как \x3c .)
  • 0
    Лучше поставить точку отладки в var arrayContent = '<% = myJsonArray%>' и посмотреть содержимое переменной.
Показать ещё 4 комментария
Теги:
express
ejs

2 ответа

1

Похоже, вы хотите передать массив из 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>
  • 0
    Мой ответ сработал для вас?
  • 0
    Нет, это не работает. Это не дает никакой конкретной ошибки как таковой. Просто говорю: myfunc не определен.
Показать ещё 6 комментариев
0

Возможно, '<%= myJsonArray %>' одинарные кавычки вокруг '<%= myJsonArray %>' будут работать, но, похоже, вы разбираете уже действующий json. console.log(arrayContent[0]).

  • 0
    Нет, это не работает. это дает мне ошибку Uncaught ReferenceError: myfunc () не определен. Это не дает ничего конкретного как такового. Вот почему я попытался получить доступ к myJsonArray в виде строки, чтобы я мог его утешить, а затем проанализировал его обратно в JSON для доступа к содержимому. Посмотрите журналы консоли, которые я прокомментировал. Спасибо
  • 0
    [object Object], [object Object], ... подразумевает одну из двух вещей: это уже правильно проанализированный json, что означает, что вам не нужно JSON.parse (), или это буквальное строковое содержимое переменной myJsonArray , Я подозреваю, что myFunc () не определено из-за отсутствия точки с запятой после json без одинарных кавычек, но возникает вопрос, почему вы объявляете json вне элемента script внутри div. это было бы легко отладить в инструментах разработки, является ли вывод в файле console.log строкой или объектом?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню