Зачем использовать тег формы, когда вы отправляете через ajax? - PullRequest
76 голосов
/ 10 июня 2011

Философский вопрос:

Скажем, у меня есть веб-приложение, для которого требуется javascript и современный браузер, поэтому прогрессивное улучшение не проблема.Если моя форма создается с помощью javascript, а все мои обновления данных выполняются с помощью ajax POST и PUT, есть ли какая-то причина, чтобы обернуть мои элементы управления в тег формы?Если я все еще собираюсь использовать тег, скажем, по семантическим или структурным причинам, есть ли какая-либо причина иметь параметры действий и методов, которые я собираюсь игнорировать?Для меня это похоже на пережиток более ранней эпохи.

Ответы [ 7 ]

70 голосов
/ 10 июня 2011

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

Клавиша ввода отправит форму. Фактически в Mobile Safari,таким образом вы получаете на клавиатуре кнопку "Go" .

Без формы, обертывающей входы, отправлять нечего.

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

В вашем случае вы просто предоставили бы обработчик событий onsubmit дляформа, которая будет отправлять ваш AJAX, затем return false, отменяя фактическую отправку.

Вы можете просто указать action="" (что означает «я»), и method не требуется - этопо умолчанию GET.

15 голосов
/ 10 июня 2011

Если вам не нужно прогрессивное улучшение, теоретически вам это не нужно.

С другой стороны, form s имеют классные группировки и семантические эффекты.Используя их, вы можете логически сгруппировать элементы формы и упростить для ваших сценариев сбор значений определенных элементов.

Например, если вы хотите ajax-представить некоторый пользовательский ввод, всегда легче сказать: «давайте возьмем все элементы в этой форме и отправим их», чем сказать «давайте возьмем эти входные данные, эти два выбора и эти три текстовые области и отправим их».По моему опыту, это действительно помогает разработчику, если присутствуют form теги.

12 голосов
/ 10 июня 2011

AJAX великолепен, но, как сказал JamWaffles (+1 к нему), использование тегов form обеспечивает запасной метод.

Лично я использую теги формы, даже для вещей, которые я отправляю с AJAX, потому что это синтаксически ясно и позволяет легко захватывать все входные данные в определенной форме. Да, вы можете сделать это с div или чем-то еще, но, как я уже сказал, использование формы синтаксически хорошо.

Между прочим, программы чтения с экрана обрабатывают содержимое внутри form по-разному, поэтому существуют проблемы с доступностью, которые необходимо учитывать при любом выборе. Обратите внимание, что по неподтвержденным данным, Google учитывает доступность в своих рейтингах, поэтому, если SEO беспокоит вас, используйте форму и делайте это правильно.

6 голосов
/ 18 декабря 2013

Резюме: Формы в порядке для MVC, простые веб-приложения, плохо для компонентно-ориентированных, многофункциональных веб-приложений.

Причина: формы не могут вкладывать другие формы: большое ограничение для компонентно-ориентированной архитектуры.

Подробнее: Для типичных приложений MVC формы отлично подходят. В богатых, сложных веб-приложениях, использующих большое количество javascript и AJAX, а также множество компонентов здесь и там, я не люблю формы. Причина: формы не могут вкладывать другие формы. Затем, если каждый компонент отображает форму, компоненты не могут вкладывать друг друга. Очень плохо. Изменяя все формы на div, я могу их вкладывать, и всякий раз, когда я хочу получить все параметры, чтобы передать их в ajax, я просто делаю (с помощью jQuery):

$ ( "# id_of_my_div") найти ( "[имя]") сериализации ();..

(или другая фильтрация)

вместо:

$ ( "# id_of_my_form") сериализации ();.

Хотя, по сентиментальным и семантическим причинам, я продолжаю называть мои divs чем-то, когда они действуют как формы.

2 голосов
/ 10 июня 2011

По моему мнению: если вы используете его по смысловым причинам, то используйте его по назначению. Атрибут action необходим (также его можно оставить пустым), чтобы он был правильно сформирован, также вы можете отделить ваши URI от логики js, установив атрибут action и читая его перед вызовом ajax.

2 голосов
/ 10 июня 2011

Не то, чтобы я мог видеть. В настоящее время я создаю веб-приложение, которое использует <form> s, но я использую их, поэтому у меня есть запасной метод, если у пользователя отключен JavaScript (e.preventDefault останавливает отправку формы в обычном режиме). В вашей ситуации, когда вы говорите, что пользователь ДОЛЖЕН иметь JavaScript, тег <form> необязателен, но, возможно, было бы целесообразно сохранить его в любом случае, если браузеру нужно что-то с ним сделать, или получить к нему доступ как своего рода класс.

Короче говоря, нет, вам не нужно использовать <form>, если вы работаете с чистым AJAX, хотя, если вы вдруг решите создать запасной код в будущем, это может оказаться идеей.

0 голосов
/ 10 июня 2011

Я не понимаю, почему вам нужно использовать тег формы здесь.Единственная причина использования тега формы (кроме проверки разметки для проверки) состоит в том, что пользователь собирается «отправлять» данные с помощью ввода или тега sumbit.Если вам не нужно этого делать, тогда форма не нужна.Однако не уверен, будет ли она считаться «действительной» разметкой.Если вы используете его, вы можете просто сделать <form action="">, поскольку действие является единственным обязательным атрибутом тега формы.Тем не менее, если вы правильно подметите, будущее веб-приложений, вероятно, больше не будет нуждаться в форме и традиционной методологии отправки.Очень интересно и радует меня.хе-хе:)

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