Чи слід включати розмітку HTML у відповідь JSON?


13

На сайті електронної комерції, додаючи товар у кошик, я хотів би показати спливаюче вікно з параметрами, які ви можете вибрати. Уявіть, що ви замовляєте iPod Shuffle і тепер вам потрібно вибрати колір та текст для гравірування.

Я хотів би, щоб вікно було модальним, тому я використовую лайтбокс, заповнений дзвінками Ajax. Зараз у мене є два варіанти:

Варіант 1: Надсилайте лише дані та генеруйте розмітку HTML за допомогою JavaScript

Приємно в тому, що він обмежує запит Ajax до мінімуму ведмедя і не змішує дані з розміткою.

Що не так велико в цьому, це те, що тепер мені потрібно використовувати JavaScript, щоб зробити моє візуалізацію, а не мати механізм шаблонів на стороні сервера. Можливо, я зможу трохи очистити підхід, використовуючи шаблонне рішення на стороні клієнта .

Варіант 2: Надішліть розмітку HTML

Що в цьому хороше, це те, що я можу мати той самий двигун для шаблонів на стороні сервера, який я використовую для решти завдань з візуалізації (Django), виконайте візуалізацію лайтбоксу. JavaScript використовується лише для вставки фрагмента HTML на сторінку. Тож воно чітко залишає візуалізацію двигуна візуалізації. Має сенс для мене.

Але мені чомусь не зручно змішувати дані та розмітку в дзвінку Ajax. Я не впевнений, що змушує мене почувати себе непросто. Я маю на увазі, це те саме, що кожна веб-сторінка подається - дані плюс розмітка - так?


Чудове запитання. Але, схоже, належить до stackoverflow.
Saeed Neamati

1
@SaeedNeamati Питання щодо проектування програмного забезпечення, особливо концептуальні запитання на дошці, як це, є тут на тему, а поза темою на Переповнення стека .

Відповіді:


10

JSON повинен просто містити дані та без розмітки. У перспективі такий підхід є більш розширеним, оскільки є потенціал для використання даних JSON в інших частинах вашого сайту. Якщо ви включите розмітку, використовувати ті ж дані для заповнення іншого шаблону стає набагато складніше.


2
Відмінний момент щодо повторного використання. Здається, всі голосують за запит Ajax лише з даних, а не з розміткою з різних причин. Але цей великий . Спасибі.
Майк М. Лін

2
Не кажучи вже про те, що JSON без розмітки менший і використовує меншу пропускну здатність.

@JackManey: Також хороший момент. Але справжня вартість додаткової пропускної здатності не настільки велика після того, як ви вже з'їли вартість HTTP-запиту. І я можу уявити деякі налаштування, де ви знаєте, що клієнтські машини настільки хитрі, що коштуватиме дорожче, щоб генерувати DOM в режимі реального часу за допомогою JavaScript. Подумайте: Внутрішні програми з користувачами на старовинних машинах / браузерах.
Майк М. Лін

3

Я б надіслав дані в запиті і наробив розмітку в js. Однією з додаткових переваг буде те, що буде менше використання пропускної здатності. Це своєрідне особисте уподобання, але, мабуть, краща ідея тримання розмітки на стороні клієнта від стороні сервера. У мене також є веб-сайт Django, і я використовую лише систему шаблонів для розміщення на сторінці деяких змінних json (одна менш необхідна версія ajax) і використання src-файлів при розробці на моїй машині. Всі сторони клієнта виконуються з ExtJS.


Мені подобається ваша ідея запису даних JSON на сторінку - не тут, оскільки я не отримую додаткові дані, поки не дізнаюся, який товар ви додаєте у свій кошик. Здійснюючи запит на макет сторінки, секунда для даних, здається, є звичайною в ці дні. Наявність даних у змінній JavaScript виключає потребу у другому HTTP-запиті без наявності двох різних бітів коду візуалізації (тобто клієнта та сервера).
Майк М. Лін

О, я бачу, ваш сервер недостатньо просунутий, щоб заздалегідь знати, що користувач збирається поставити у кошик;).
pllee

1

Я думаю, ви говорили про плюси і мінуси обох. Чому б не переглянути третій варіант створення JavaScript для вашої лайтбокса, який генерується з подання django. Тоді чи має ваш JSON просто містити дані, щоб оновити їх для кожного перегляду?

Що ви повинні зробити, це обернути весь шаблон шаблону в змінні javascript, а потім вивести їх за допомогою JavaScript після отримання запиту JSON на стороні клієнта.


Дякую за відповідь. Це власне те, що я мав на увазі у варіанті 1. Лайтбокс як контейнер буде записаний у сторінку, але прихований. Дані JSON з запиту Ajax будуть використовуватися для створення вмісту в контейнері. Частина цього вмісту буде позначена за допомогою HTML. Як ви інтерпретували варіант 1? Можливо, це може бути моїм третім варіантом.
Майк М. Лін

Я щось міркував за принципом цього stackoverflow.com/questions/6008908/…, тоді використовуючи JSON для заміни даних після початкового завантаження
Ryan Gibbons

0

Ви повинні використовувати механізм шаблону для розмітки та зберігати десь приховане поле для зберігання значень, які потім можна знайти в документі за допомогою селектора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.