Я пытаюсь направить браузер на другую страницу. Если бы я хотел запрос GET, я мог бы сказать
document.location.href = 'http://example.com/q=a';
Но ресурс, к которому я пытаюсь получить доступ, не будет отвечать должным образом, если я не использую запрос POST. Если бы это не было сгенерировано динамически, я мог бы использовать HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Тогда я просто отправлю форму из DOM.
Но на самом деле я хотел бы JavaScript-код, который позволяет мне сказать
post_to_url('http://example.com/', {'q':'a'});
Какова лучшая кросс-браузерная реализация?
редактировать
Извини мне было не понятно. Мне нужно решение, которое меняет местоположение браузера, так же, как отправка формы. Если это возможно с XMLHttpRequest , это не очевидно. И это не должно быть ни асинхронным, ни использовать XML, поэтому Ajax не является ответом.
Ответы:
Динамически создавать
<input>
s в форме и отправить егоПример:
РЕДАКТИРОВАТЬ : Так как за это так много проголосовали, я думаю, что люди будут копировать это много. Поэтому я добавил
hasOwnProperty
проверку, чтобы исправить любые непреднамеренные ошибки.источник
Это будет версия выбранного ответа с использованием jQuery .
источник
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Простая и быстрая реализация ответа @Aaron:
Конечно, вы должны использовать JavaScript-фреймворк, такой как Prototype или jQuery ...
источник
Использование
createElement
функции, представленной в этом ответе , которая необходима из-за нарушения IE в атрибуте name для элементов, обычно создаваемых с помощьюdocument.createElement
:источник
Ответ Ракеш Пая удивителен, но есть проблема, которая возникает у меня (в Safari ), когда я пытаюсь опубликовать форму с полем под названием
submit
. Например,post_to_url("http://google.com/",{ submit: "submit" } );
. Я слегка исправил функцию, чтобы обойти это переменное столкновение пространства.источник
Нет. У вас не может быть запроса на публикацию JavaScript, как отправка формы.
Вы можете получить форму в HTML, а затем отправить ее с помощью JavaScript. (как объяснялось много раз на этой странице).
Вы можете создать HTML самостоятельно, вам не нужен JavaScript для написания HTML. Это было бы глупо, если бы люди предложили это.
Ваша функция просто настроит форму так, как вы хотите.
Затем используйте это как.
Но я бы просто пропустил функцию и просто сделал.
Наконец, решение о стиле помещается в файл ccs.
Лично я думаю, что формы должны быть адресованы по имени, но это сейчас не важно.
источник
Если у вас установлен Prototype , вы можете сжать код для генерации и отправки скрытой формы следующим образом:
источник
это ответ Ракеша, но с поддержкой массивов (что довольно часто встречается в формах):
простой javascript:
о, а вот версия jquery: (немного другой код, но сводится к тому же)
источник
Одним из решений является создание формы и ее отправка. Одна реализация
Таким образом, я могу реализовать букмарклет сокращения URL с помощью простого
источник
Что ж, жаль, что я не прочитал все остальные посты, чтобы не терять время на создание этого из ответа Ракеш Пая. Вот рекурсивное решение, которое работает с массивами и объектами. Нет зависимости от jQuery.
Добавлен сегмент для обработки случаев, когда вся форма должна быть представлена как массив. (т. е. где нет объекта-обертки вокруг списка элементов)
источник
Три варианта здесь.
Стандартный ответ JavaScript: используйте фреймворк! Большинство фреймворков Ajax абстрагируют вас от простого способа сделать POST XMLHTTPRequest .
Сделайте запрос XMLHTTPRequest самостоятельно, передавая сообщение в метод open вместо get. (Подробнее в разделе Использование метода POST в XMLHTTPRequest (Ajax) .)
С помощью JavaScript динамически создайте форму, добавьте действие, добавьте свои данные и отправьте их.
источник
Я бы пошел по маршруту Ajax, как другие предложили что-то вроде:
источник
Самый простой способ - использовать Ajax Post Request:
где:
Затем в обработчике успеха перенаправьте браузер с помощью что-то вроде window.location.
источник
Вот как я написал это, используя jQuery. Протестировано в Firefox и Internet Explorer.
источник
Библиотека Prototype включает в себя объект Hashtable с методом .toQueryString (), который позволяет легко превратить объект / структуру JavaScript в строку стиля строки запроса. Поскольку для публикации требуется, чтобы «тело» запроса было строкой в формате строки запроса, это позволяет вашему Ajax-запросу работать должным образом как сообщение. Вот пример использования Prototype:
источник
Это отлично работает в моем случае:
Вы можете использовать его в функции, как:
Используя это вы можете опубликовать все значения входов.
источник
Еще одно рекурсивное решение, поскольку некоторые из них, похоже, сломаны (я не проверял их все). Это зависит от lodash 3.x и ES6 (jQuery не требуется):
источник
Мое решение будет кодировать глубоко вложенные объекты, в отличие от принятого в настоящее время решения @RakeshPai.
Он использует библиотеку 'qs' npm и функцию stringify для преобразования вложенных объектов в параметры.
Этот код хорошо работает с бэкэндом Rails, хотя вы должны иметь возможность изменить его для работы с любым бэкэндом, который вам нужен, изменив параметры, передаваемые для stringify. Rails требует, чтобы arrayFormat был установлен в "скобки".
Пример:
Производит эти параметры Rails:
источник
FormObject является опцией. Но FormObject не поддерживается большинством браузеров.
источник
Это как вариант Алана 2 (выше). Как создать экземпляр httpobj, оставлено в качестве упражнения.
источник
Это основано на коде beauSD с использованием jQuery. Он улучшен, поэтому он работает рекурсивно на объектах.
источник
Вы можете динамически добавить форму, используя DHTML, а затем отправить.
источник
Вы можете использовать такую библиотеку, как jQuery и ее метод $ .post .
источник
Я использую java document.forms и зацикливаю его, чтобы получить все элементы в форме, а затем отправляю через xhttp. Так что это мое решение для отправки javascript / ajax (со всеми html, включенными в качестве примера):
источник
Вы можете использовать триггерный метод jQuery для отправки формы, так же, как вы нажимаете кнопку, например,
он будет представлен в браузере.
источник
Метод, который я использую для автоматической публикации и перенаправления пользователя на другую страницу, заключается в том, чтобы просто написать скрытую форму и затем автоматически отправить ее. Будьте уверены, что скрытая форма не занимает абсолютно места на веб-странице. Код будет примерно таким:
Применение автоматической подачи
Приложение автоматической отправки будет направлять значения формы, которые пользователь автоматически вставит на другой странице, обратно на эту страницу. Такое приложение будет выглядеть так:
источник
Вот как я это делаю.
источник
Ни одно из вышеупомянутых решений не обрабатывало вложенные параметры с помощью только jQuery, так что вот мое решение с двумя центами.
Если вы используете jQuery и вам нужно обрабатывать глубоко вложенные параметры, вы можете использовать эту функцию ниже:
Вот пример того, как его использовать. HTML-код:
И если вы нажмете кнопку тестирования, она опубликует форму, и вы получите следующие значения в POST:
Примечание: если вы хотите опубликовать форму по другому URL-адресу, чем текущая страница, вы можете указать URL-адрес в качестве второго аргумента функции postForm.
Так, например (для повторного использования вашего примера):
Надеюсь это поможет.
Примечание 2: код был взят из плагина перенаправления . Я просто упростил это для своих нужд.
источник
Плагин jQuery для перенаправления с помощью POST или GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Чтобы проверить, включите вышеуказанный файл .js или скопируйте / вставьте класс в свой код, затем используйте код здесь, заменив «args» именами ваших переменных, а «values» значениями соответствующих переменных:
источник
Вы можете сделать AJAX-вызов (вероятно, с использованием библиотеки, такой как Prototype.js или JQuery). AJAX может работать с опциями GET и POST.
источник