HTTP POST и постепенная деградация - PullRequest
3 голосов
/ 20 октября 2010

У меня есть веб-приложение, которое, помимо прочего, содержит таблицу элементов, созданных с помощью обратного вызова Ajax.Куча полей формы в верхней части таблицы позволяют мне фильтровать элементы, которые будут отображаться в таблице по различным критериям, и отображать их.

В некоторых частях таблицы есть списки предметов с пометкой [X] рядом с ними, которые я могу удалить, нажав на эти предметы.

Теперь, если бы я делал это не-ajax / javascript, страница получала бы кучу полей данных POST, а затем соответствующим образом отображала бы таблицу.Я могу сделать это, но я также хотел бы Ajaxify всей установки.Мои вопросы касаются этого.

  1. Как бы я создал кнопку [X].Простой <a> будет «работать», но это состояние GET, поэтому я не хочу этого делать.Теперь я делаю крошечную форму со скрытым параметром, который содержит удаляемый элемент, и стилизованную кнопку отправки, которая является [x].Если я уточню это, я смогу получить ответ и сделать все необходимое.

  2. Как мне сохранить мой сервер СУХИМ?Я не хочу иметь два совершенно разных бита кода для Ajaxified и обычной версии.Сейчас я делаю, чтобы не-Ajax-версия отправлялась по URL, который изменяет состояние, а затем снова перенаправляет на главную страницу (аналогично системе типов PRG).С включенным Ajax я просто вызываю URL и игнорирую перенаправление, но использую возвращенные данные для настройки таблицы.Это «правильный путь»?

  3. Любой другой совет о постепенном ухудшении того, как сохранить мой бэкэнд СУХИМ?

1 Ответ

3 голосов
/ 20 октября 2010

Я бы поместил каждую строку в ее собственную форму (с method='POST') и включил бы скрытое поле, чтобы сказать, какой элемент должен быть удален. [X] отправит форму, и в случае отправки формы, если XmlHttpRequest отсутствует, просто отправьте форму на сервер, который удалит элемент и перенаправит на ту же страницу снова (это хорошая практика, чтобы избежать перезагрузки повторно отправить удаление POST).
Если присутствует XmlHttpRequest, установите для него значение POST с идентификатором объекта, который нужно удалить, а затем удалите строку, если запрос выполнен успешно. Вы можете установить флаг в запросе AJAX так, чтобы перенаправление не происходило, а просто было успешным (200 OK).

...