Каковы "лучшие практики" для 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 в этом случае и предоставил себе дополнительную гибкость, которая может быть полезной в будущем.