Каковы "лучшие практики" для AJAX с Django (или любой веб-картой)

Я разрабатываю приложение для отслеживания проблем в Django, в основном для обучения, но также и для своих собственных проектов. И я изучаю использование AJAX для "расширенного" удобства использования. Например, разрешая пользователям "показывать" особые проблемы, которые добавили бы их в свой список наблюдения. Это реализовано во многих сайтах и ​​часто AJAX - поскольку URL, который просматривает пользователь, не нужно изменять, когда они нажимают на звездочку.

Теперь мне интересно, какой ответ вернется из моего представления star_unstar, который определяет, выполняется ли запрос через AJAX или нет.

В настоящее время, если запрос является запросом AJAX, он возвращает только раздел HTML, который необходим для звезды, поэтому я могу заменить HTML в родительском объекте DIV, так как звезда появляется "on" или "off", в зависимости от действия пользователя.

Тем не менее, я бы скорее вернул какой-то объект JSON, поскольку, как мне кажется, он кажется более "правильным". Проблема с этим методом заключается в том, что javascript должен будет изменить атрибут star image src, href на нем и заголовок ссылки также, что, похоже, много работает для такой простой функции. Я также изучаю комментарии в режиме реального времени в будущем, но я хочу понять, как вещи должны быть выполнены, прежде чем я начну кодировать множество JS.

Каков общий консенсус при реализации таких функций, как это, а не только с Django, но все структуры, которые работают аналогичным образом?

Ответ 1

Когда я работаю с Ajax, моя главная проблема заключается в том, чтобы ограничить объем данных, которые я должен отправить. Приложения Ajax этого типа должны быть очень отзывчивыми (возможно, невидимыми).

В случае переключения звезды я создаю фактические состояния включения/выключения как классы CSS, StarOn и StarOff. Клиент будет загружать как выключенную, так и звезду, когда они впервые посещают страницу, что приемлемо, учитывая, что звезда представляет собой небольшое изображение. Когда вы захотите изменить внешний вид звезды в будущем, вы будете редактировать CSS только и не должны касаться javascript вообще.

Что касается Ajax, я бы отправил туда и обратно одну вещь - переменную JSON true/false, которая говорит, был ли запрос успешным. Как только пользователь нажмет на звезду, я перевёл его в состояние StarOn и отправлю запрос. 99% времени Ajax вернет true, и пользователь даже не поймет, что в веб-запросе произошла какая-то задержка. В редком случае, когда вы получаете назад false, вам нужно вернуть звезду в StarOff и отобразить сообщение об ошибке пользователю.

Ответ 2

Я не думаю, что ваш вопрос относится, в частности, к Django или Python, как вы указываете в конце.

Есть много личных предпочтений в том, вернете ли вы HTML-код для записи в DOM или некоторые сериализованные данные как JSON. Есть некоторые практические факторы, которые вы, возможно, захотите принять во внимание, хотя.

Преимущества HTML: - Легко и быстро писать прямо на странице.

Преимущества JSON: - Не связано с интерфейсом вашего приложения. Если вам нужна эта функция в другом месте приложения, она готова к работе.

Мой звонок. Это лишь относительно тривиальное количество HTML для обновления, и я бы, вероятно, пошел на возвращение JSON в этом случае и предоставил себе дополнительную гибкость, которая может быть полезной в будущем.