Передать атрибут модели Spring в JS-скрипт

Итак, мои данные анализируются в json, а затем помещаются в атрибуты модели. Как это:

@RequestMapping("/{id}")
public String getNetworkDetails(Model model, @PathVariable String id) throws JsonProcessingException{

    model.addAttribute("poolHashrates", findAndDisplayDataService.getAllPools(Long.valueOf(id)));
    model.addAttribute("poolDataJson", findAndDisplayDataService.returnPoolsAsJson(Long.valueOf(id)));

    return "networkDetails :: modalContents";
}

Затем я пытаюсь назначить строку poolDataJson переменной JS во фрагменте html через:

<script>
    var data = eval('('+'${poolDataJson}'+')');
    console.info(data);
</script>

Что я хотел бы сделать с данными, так это передать их во внешний файл JavaScript в качестве данных для моей круговой диаграммы. Но сначала я получаю сообщение об ошибке при присвоении строки:

Uncaught SyntaxError: Unexpected token {

Что мне не хватает?

РЕДАКТИРОВАТЬ

Я также попытался назначить строку json для скрытого ввода через:

<input type = "hidden" id = "networkId" th:value = "${poolDataJson}"/></td>

А затем прочтите это с помощью:

var data = document.getElementById('networkId').innerHTML;
console.info(data);

Но опять же, в консоли ничего не печатается. Когда я вставляю ${poolDataJson} в

it prints properly on a page...

Попробуйте назначить poolDataJson переменной, например var data = $ {poolDataJson}; а затем передать данные в eval.

Sudhir Ojha 22.05.2018 10:27

Одно и тоже. Неожиданный токен на var json = ${poolDataJson};

Maciaz 22.05.2018 10:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 249
1

Ответы 1

Вы не должны возвращать String как текст JSON. Вместо этого вы должны вернуть обычные объекты Java, а затем оценить их следующим образом (тимелеаф автоматически преобразует объекты в JSON):

<script th:inline = "javascript">
var data = /*[[${poolDataJson}]]*/ {};
console.info(data);
</script>

Что касается ваших ошибок. Я должен предположить, что ваш метод findAndDisplayDataService.returnPoolsAsJson возвращает недопустимый JSON. Без реального примера сложно сказать.

Другие вопросы по теме