Я пытаюсь получить массив, созданный в моем php-контроллере, для передачи данных в javascript в файле .twig.
Я могу получить доступ ко всем значениям в цикле for в .twig, но при попытке получить значение в javascript я могу получить весь массив только с помощью:
var markers = {{ products|json_encode|raw }};
Это производит:
var markers = [{"id":"1","name":"x","location":"San Diego"},{"id":"2","name":"y","location":"LA"}];
При попытке получить доступ к определенным значениям с помощью цикла for в javascript:
for (i = 0; i < markers.length; i++)
{
alert(markers[i][0])
}
Используя console.info/alert, я получаю [undefined] для маркеров [i] [0] и [объект объекта], если я перебираю маркеры [i]. Длина правильная.
Это мой первый проект с использованием .twig, поэтому я не знаю, пропускаю ли я что-то действительно очевидное, потому что не могу найти свою проблему.
Любая помощь будет оценена по достоинству!
Все еще не могу вытащить какие-либо данные из массива, получая только "", разве нельзя взять значения из var markers = {{ products|json_encode|raw }};
?. Из приведенного примера console.info($entryInfoObjects);
показывает мне массив в консоли 0: {место: "SD", имя: "x"} 1: {место: "LA", имя: "y"}, но приведенный пример var entryInfo = { location: '{{ product.location }}',};
для извлечения конкретных данных дает мне " "...
Похоже, ваша проблема заключается в цикле javascript for.
Смотри сюда:
var markers = [{"id":"1","name":"x","location":"San Diego"},{"id":"2","name":"y","location":"LA"}];
Ни один из объектов в вашем массиве не имеет свойства с именем 0
. У вас есть только свойства с именами id
, name
и location
.
Измените свой цикл на что-то вроде:
for (i = 0; i < markers.length; i++)
{
alert(markers[i]['name'])
}
Вы должны увидеть, что он показывает вам значение свойства каждого объекта name
.
В twig используйте атрибут данных для элемента, используйте фильтр, чтобы избежать любых одинарных кавычек, а затем используйте JSON.parse в Javascript для получения данных. Здесь есть хороший обучающий пост: cruflesscraft.com/…