2009-09-22 2 views
10

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

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

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

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

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

ответ

7

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

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

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

+0

Я рассматривал это как способ пойти, и теперь он выглядит как самый разумный метод. Спасибо за помощь! –

4

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

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

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

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

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

+0

Это имеет смысл. У меня есть один вид (как предлагается) в настоящее время для переключения звезды, но я могу изменить это на два отдельных, звездных и нестационарных. –

Смежные вопросы