POST против вызова Ajax - PullRequest
       7

POST против вызова Ajax

13 голосов
/ 23 января 2009

Теперь, когда большинство современных браузеров поддерживают запросы AJAX и на стороне клиента без выполнения POST, какова роль POST (отправка формы)?

Существуют ли ситуации или общие правила, когда POST всегда предпочтительнее XmlHttpRequest?

Все, что делает POST, это помещает пары значений ключа переменной в заголовок сервера. Преимущества POST, о которых я могу думать, это большие объемы данных и мобильные браузеры. Я скучаю по многим другим?

N.B. Я знаю, что вы можете выполнять POST-вызовы с помощью вызовов AJAX, о которых я говорю прежде всего с тегом <form>

Ответы [ 7 ]

21 голосов
/ 23 января 2009

Этот вопрос немного сложен, потому что он объединяет два понятия. Первый - это POSTing, а второй - Ajax. POSTing по сравнению с GETting - это другой метод HTTP с другой реализацией и семантикой. Ajax, или XmlHttpRequest, имеет аналог в обычном запросе / навигации. Вы можете использовать POST или GET как для XmlHttpRequest, так и для обычной навигации и отправки формы (ну, POST всегда является «отправкой формы»). Разница между XmlHttpRequest и обычными запросами заключается в том, что обычный запрос заменяет страницу новой страницей.

Вы можете написать практически любой веб-сайт, используя только Ajax для получения данных и изменения DOM; это в основном то, как работает Gmail. В традиционном смысле «подачи заявок» не существует. Но все еще есть GET и POST, потому что сервер и браузеры интерпретируют результаты по-разному. GET должен быть идемпотентом; POST предназначен для операций, которые изменяют состояние на сервере. Например, транзакция ecom должна быть POST. Это не меняется при использовании Ajax, потому что вы хотите, чтобы прокси-серверы также понимали, что это POST и что они не должны пытаться кэшировать ответ.

Есть также преимущества и недостатки использования GET против POST. Вы не можете добавить в закладки результаты POST, потому что параметры скрыты. Вы не можете получить что-либо со значениями параметров неограниченной длины, потому что IE поддерживает только около 2000 символов.

Также есть недостатки использования Ajax по сравнению с обычными представлениями; Вы не можете добавить закладку к полученной странице (потому что страница не изменилась); кнопка назад не будет работать, как ожидалось. Но с помощью Ajax вы можете свести к минимуму передаваемые данные, а также обеспечить удобные обновления страницы (например, мониторинг состояния длительного процесса) без раздражающего мерцания или обновления.

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

13 голосов
/ 23 января 2009

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

2 голосов
/ 23 января 2009

Если вам нужно обновить всю страницу, пост, вероятно, будет проще.

1 голос
/ 23 января 2009

Ключевым отличием является то, что POST формы отправляет данные и может перейти к новому URL-адресу за один прием на сервер. Ajax может отправлять данные, но не может перейти на новую страницу.

0 голосов
/ 23 февраля 2009

Я собираюсь ответить на свой собственный вопрос с этим видео , с которым я недавно столкнулся Дугом Крокфордом. Он описывает качели между всеми ajax и всеми обновлениями страниц.

0 голосов
/ 23 января 2009

Если теория, HTTP GET должен быть идемпотентным запросом информации: два идентичных GET должны возвращать одну и ту же информацию.

HTTP POST, с другой стороны, предназначены для хранения состояния и выполнения действий: два одинаковых POST могут выполнять разные действия в зависимости от того, кто это делал, что было сделано ранее и когда это делается.

0 голосов
/ 23 января 2009

Э-э .. отправлять формы?

Пост действительно хорош для больших форм, так как значения скрыты в заголовках html и не привязаны к строке URL?

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