Каковы "лучшие практики" для AJAX с Django (или любой веб-фреймворк) - PullRequest
10 голосов
/ 23 сентября 2009

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 23 сентября 2009

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

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

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

4 голосов
/ 23 сентября 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...