Существует также вариант 4:
Скопируйте существующий элемент в списке и измените его значения. Это, конечно, менее гибко, чем шаблоны. Вместо этого вы можете скопировать скрытый элемент, чтобы обработать случай, когда список пуст.
Вы также можете попробовать вариант 2b:
Создайте HTML на сервере, как вариант 2, но вместо прямого доступа к базе данных передайте подпрограмму генерации JSON (или объект, который можно легко преобразовать в JSON). Это требует больше работы, но означает, что вы эффективно пишете API в то же время, когда пишете свой собственный веб-сайт.
Вариант 1 - это то, что будет использовать любое не веб-приложение. Несмотря на то, что поисковые системы улучшают свою способность обрабатывать AJAX, все равно настоятельно рекомендуется возвращать весь контент в HTML. Я думаю, что Javascript достаточно быстр во всех современных браузерах, что, за исключением огромных страниц 1, было бы вполне разумно, если бы не проблема SEO.
Существует также опция 5 - использовать Javascript на сервере для генерации страницы и использовать тот же код на клиенте. Это, вероятно, самый сложный подход, и я бы не рекомендовал его, если у вас нет веских причин.