Поля GET и POST в одной таблице - PullRequest
0 голосов
/ 27 июля 2011

Ниже приведен довольно типичный макет страниц администратора (например, поиск в базе данных и что-то с результатами):

  • действие выпадающее
  • строка заголовка таблицы с именами столбцов
  • вторая строка заголовка таблицы с фильтрами поиска по столбцам
  • Строка результата с флажком
  • кнопка поиска

Пользователь может установить все виды фильтров, выполнить поиск, выбрать некоторые из результатов с помощью флажков, затем выбрать действие из раскрывающегося списка, и действие и идентификаторы выбранной строки будут отправлены в некоторый сценарий обработки.

Существуют некоторые основные ожидания для такого контроля:

  • GET для поисков, POST для действий
  • использовать функции автоматического изменения размера таблиц HTML, чтобы столбцы могли быть узкими или широкими в зависимости от содержимого
  • достаточно кроссбраузерный

Я искал хорошую технику для достижения этой цели, но все, что я могу придумать, имеет серьезные недостатки:

  • простейшим было бы иметь две формы (форму GET для элементов управления поиском и POST для флажков), но HTML4 DTD делает это невозможным: я могу либо обернуть всю таблицу в одну форму, либо поместить отдельные формы внутри каждая ячейка таблицы (что довольно бесполезно).
  • альтернативно, я мог бы использовать разные элементы таблицы для каждой строки и свободно группировать их в формы, но тогда ширина столбцов не совпадет, и мне придется установить фиксированную ширину. (Типы отображения CSS3 table-* не имеют адекватной поддержки.)
  • HTML5 позволяет нам размещать элементы ввода вне форм и связывать их с атрибутом form, но это имеет еще меньшую поддержку.
  • Существует отвратительный хак с использованием неверного HTML с формами, непосредственно обертывающими элементы tr, который, кажется, работает, но портит DOM, сбивает с толку библиотеки Javascript и не совсем безопасен для будущего.
  • Я могу обернуть всю таблицу в одну форму и динамически изменять ее метод и действие в зависимости от того, какая кнопка была нажата, но это делает меня зависимым от Javascript; Кроме того, я не хочу отправлять элементы управления поиском в запросе POST, и наоборот, это ненужный трафик. Кроме того, при наличии большого количества строк результатов поисковый запрос может превышать ограничения размера URL (всего несколько тысяч символов в IE) из-за всех флажков.
  • Я мог бы сделать то же самое, но отключить ненужные поля, когда пользователь отправляет форму. Помимо того, что он слишком сложен для такой простой задачи, у него есть различные проблемы с удобством использования, когда запрос каким-то образом остановлен (например, пользователь нажимает ESC), и у пользователя остается куча, если отключены поля формы.

Есть ли лучшее решение, о котором я не знаю?

1 Ответ

0 голосов
/ 27 июля 2011

Используйте AJAX.Это позволяет вам определять ваши собственные данные получения / публикации, которые не зависят от формы.

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