Простой ответ: # 2.
Более сложный ответ: # 5
По сути, ваша презентация должна быть отделена от обработки на стороне сервера. Простые сценарии, в которых вы просто собираетесь сделать это отображение один раз, отослать обратно JSON и заполнить его на стороне клиента. Камнем преткновения является то, как я могу использовать эту логику отображения? Или, что если моя логика отображения зависит от возвращения JSON, а мой JavaScript становится грязным и грубым? Что, если я хочу вернуть одну из двух совершенно разных вещей и не хочу усложнять мой javascript?
Ну, вот тогда вам нужно сделать еще один шаг, чтобы разделить сценарии рендеринга. Это когда у вас могут быть страницы оболочки, элементы управления, представления или все, что вы дали своей структуре. Ваша цель - использовать логику программирования на стороне сервера, чтобы заполнить это представление / элемент управления, отобразить его на стороне сервера, а затем передать обратно весь фрагмент HTML обратно в ваш вызов JavaScript AJAX. Этот большой кусок может быть загружен напрямую без каких-либо дополнительных сценариев.
Есть компромиссы! Не используйте это, когда:
- Ваши данные и отображение прямо вперед
- Вы используете этот предмет один раз
- Ваши просматриваемые виды гигантские. Помните, вы передаете это по проводам. Циклически перебирая данные в JavaScript, построение ячеек может быть быстрее, чем одновременная передача всего текста таблицы.
Используйте эту технику рендеринга, когда:
- Вы возвращаете очень изменчивый контент.
- Логика отображения является сложной и переменной.
- Ваша логика отображения зависит от некоторых данных, которые вы не хотите, чтобы клиент знал / заботился о них.
Итак, ваша цель № 1: отделить логику рендеринга от кода на стороне сервера. Никогда не помещайте свой HTML в код, но если вы можете, вы можете рассмотреть рендеринг фрагментов страницы и передачу вернуть весь HTML-код по проводам, позволяя серверу генерировать HTML, а не JavaScript.