HTTP POST и изящная деградация
-
09-10-2019 - |
Вопрос
У меня есть веб-приложение, которое среди прочего содержит таблицу элементов, созданных с помощью обратного вызова AJAX. Куча полей формы в верхней части таблицы позволяет мне фильтровать элементы, которые будут отображаться в таблице в соответствии с различными критериями и показать его.
Некоторые части таблицы имеют списки элементов с помощью [X], отмеченные рядом с ними, что я могу удалить, щелкнув эти элементы.
Теперь, если я делал этот способ без AJAX / JavaScript, страница получит кучу размещенных полей данных, а затем дает бы таблицу соответственно. Я могу сделать это, но я также хотел бы аяссифицировать всю настройку. Мои вопросы относительно этого.
Как бы я создал кнопку [x]. Просто
<a>
«Работает», но это модифицирующее состояние, поэтому я не хочу этого делать. То, как я делаю это сейчас, это крошечная форма с скрытым параметром, чем удерживает элемент, который будет удален, и кнопка «Отправка в стиле», которая является [X]. Если я ajaxify это, я могу получить ответ и сделать необходимое.Как я удерживаю свою бэкэнд сухую? Я не хочу иметь два совершенно разных бита кода для Ajaxified Version и регулярных. То, что я делаю прямо сейчас, - это версию без AJAX в URL-адрес, который меняет состояние, а затем снова перенаправляет на главную страницу (аналогично системе типа PRG). С помощью Ajax включен, я просто называю URL-адрес и игнорирую перенаправление, но использую возвращенные данные для настройки таблицы. Это «правильный путь»?
Любые другие советы по изящной деградации о том, как сохранить мою бодрость?
Решение
Я бы поставил каждую строку в свою собственную форму (с method='POST'
) и включите скрытое поле, чтобы сказать, какой элемент должен быть удален. [X] представит бы форму, а в представлении Form представит, если XMLHTTPREQUEST не присутствует, просто отправьте форму на сервер, который будет удалять элемент и снова перенаправить на ту же страницу (это хорошая практика, чтобы избежать перезагрузки повторно повторно поставку пост удаления).
Если присутствует XMLHTTPREQUEST, установите его до публикации с идентификатором вещи, чтобы удалить, а затем удалить строку, если запрос удался. Вы можете установить флаг в запросе AJAX, чтобы перенаправить не происходит, просто успех (200 ОК).