Загрузка нового контента с помощью Ajax - PullRequest
2 голосов
/ 27 октября 2010

Это ситуация, с которой я сталкивался несколько раз, но не уверен, что это лучший подход.

Допустим, у меня есть какой-то динамический контент, который пользователи могут добавлять через Ajax.Например, возьмем комментарии Stack Overflow - люди могут добавлять комментарии непосредственно на страницу с помощью Ajax.

Вопрос в том, как мне реализовать добавление самого нового контента.Например, это выглядит как вызов ajax, который переполнение стека использует для добавления комментария, просто возвращает html, который заменяет все комментариев (а не только новый).Этот способ сохраняет избыточную логику в коде Javascript, который должен «знать», как выглядит HTML.

Это лучший подход?Если это так, как лучше всего реализовать это в Django, чтобы не было избыточности (то есть, чтобы представление не должно знать, как выглядит HTML?)

Спасибо!

РЕДАКТИРОВАТЬ: В моем конкретном случае нет никакой опасности, что другие комментарии будут добавлены в это время - это просто вопрос наилучшей реализации.

Ответы [ 3 ]

4 голосов
/ 27 октября 2010

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

1 голос
/ 27 октября 2010

Я не опытен ни с Django, ни с Python, но я полагаю, что базовая логика одинакова для всех серверных языков.

При взвешивании плюсов и минусов любого подхода все зависит от того, что вы хотите оптимизировать,Если важна пропускная способность, то очевидно, что использование чистого JSON в коммуникации снижает задержку по сравнению с передачей готового HTML.

Однако дублирование функциональности представления на стороне сервера в Javascript - это утомительный и подверженный ошибкам процесс.Это просто занимает много времени.

Я лично чувствую, что в большинстве случаев (для сайтов с небольшим и средним трафиком) совершенно нормально собрать фрагмент HTML вместе на стороне сервера и просто заменить содержимое контейнера (Например, содержимое div) внутри функции обратного вызова AJAX.Конечно, замена всей страницы будет глупой, поэтому ваше приложение Django должно поддерживать вывод определенных областей документа.

1 голос
/ 27 октября 2010

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

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