Я хотел бы отправить некоторые данные, используя XMLHttpRequest в JavaScript.
Скажем, у меня есть следующая форма в HTML:
<form name="inputform" action="somewhere" method="post">
<input type="hidden" value="person" name="user">
<input type="hidden" value="password" name="pwd">
<input type="hidden" value="place" name="organization">
<input type="hidden" value="key" name="requiredkey">
</form>
Как я могу написать эквивалент, используя XMLHttpRequest в JavaScript?
javascript
ajax
post
xmlhttprequest
Джек Гринхилл
источник
источник
params
вместо строки, как в jQuery?Connection
иContent-Length
заголовки не могут быть установлены. Он скажет «Отказался устанавливать небезопасный заголовок« длина содержимого »». См stackoverflow.com/a/2624167/632951application/json
запрос?Или, если вы можете рассчитывать на поддержку браузера, вы можете использовать FormData :
источник
http.setRequestHeader("Content-length", params.length);
иhttp.setRequestHeader("Connection", "close");
. Они нужны? Возможно, они нужны только в определенных браузерах? (На этой другой странице есть комментарий, в котором говорится, что установка заголовка Content-Length была «именно то, что нужно»)Content-Type
автоматически меняетсяmultipart/form-data
. Это имеет серьезные последствия для серверной части и того, как информация доступна там.Используйте современный JavaScript!
Я бы посоветовал разобраться
fetch
. Это эквивалент ES5 и использует обещания. Это намного более читабельно и легко настраивается.В Node.js вам нужно импортировать
fetch
используя:Если вы хотите использовать его синхронно (не работает в верхней области):
Больше информации:
Документация Mozilla
Могу ли я использовать (95% март 2020)
Дэвид Уолш Учебник
источник
function()
примеры на случай, если ты не предпочитаешь=>
. Вы должны абсолютно использовать современный JS, чтобы облегчить опыт разработчика. Беспокойство о небольшом проценте людей, застрявших в IE, не стоит того, если вы не большое предприятиеthis
ключевым словом. Мне нравится упоминать это, но я также тайно ненавижу людей, которые используютthis
архитектуру наследования вместо фабрик функций. Прости меня, я узел.this
чумы, и любой должен читатьthis
.this
.Минимальное использование
FormData
для отправки запроса AJAXзамечания
Это не полностью отвечает на вопрос OP, поскольку требует, чтобы пользователь щелкнул, чтобы отправить запрос. Но это может быть полезно людям, которые ищут такого рода простое решение.
Этот пример очень прост и не поддерживает
GET
метод. Если вас интересуют более сложные примеры, ознакомьтесь с отличной документацией по MDN . См. Также аналогичный ответ о XMLHttpRequest для публикации формы HTML .Ограничение этого решения: как отмечают Джастин Бланк и Томас Манк (см. Их комментарии),
FormData
не поддерживается IE9 и ниже и браузером по умолчанию на Android 2.3.источник
FormData
поддерживается многими браузерами, кроме IE9 и Android 2.3 (и OperaMini, но этот последний широко не используется). Приветствия ;-)onsubmit="return submitForm(this);"
иначе пользователь будет перенаправлен на URL в запросе.false
. Еслиtrue
возвращается, исходный (нежелательный) запрос POST будет отправлен! Ваш ответ правильный, извините за путаницу.Убедитесь, что ваш Backend API может анализировать JSON.
Например, в Express JS:
источник
ПЛАГИНЫ НЕ НУЖНЫ!
Выберите код ниже и перетащите его в BOOKMARK BAR ( если вы его не видите, включите в настройках браузера ), затем отредактируйте эту ссылку:
Это все! Теперь вы можете посетить любой веб-сайт и нажать эту кнопку в BOOKMARK BAR !
НОТА:
Вышеуказанный метод отправляет данные с использованием
XMLHttpRequest
метода, поэтому при запуске сценария вы должны находиться в одном домене. Вот почему я предпочитаю отправлять данные с имитацией FORM SUBMITTING, которая может отправить код в любой домен - вот код для этого:источник
XmlHttpRequest
в вашем ответе: |Я столкнулся с подобной проблемой, используя тот же пост, и по этой ссылке я решил мою проблему.
Эта ссылка завершила информацию.
источник
источник
Попробуйте использовать объект json вместо formdata. ниже код работает для меня. formdata у меня тоже не работает, поэтому я придумала это решение.
источник
Просто для читателей, которые находят этот вопрос. Я обнаружил, что принятый ответ работает нормально, если у вас есть заданный путь, но если вы оставите его пустым, он не будет работать в IE. Вот что я придумал:
Вы можете это так:
источник
Есть некоторые дубликаты, которые касаются этого, и никто не объясняет это. Я заимствую пример принятого ответа, чтобы проиллюстрировать
Я упростил это (я использую
http.onload(function() {})
вместо более старой методологии ответа) для иллюстрации. Если вы используете это как есть, вы обнаружите, что ваш сервер, вероятно, интерпретирует тело POST как строку, а не фактическиеkey=value
параметры (то есть PHP не будет показывать никаких$_POST
переменных). Вы должны передать заголовок формы, чтобы получить это, и сделать это доhttp.send()
Если вы используете JSON, а не данные в кодировке URL,
application/json
вместо этого передайтеисточник
Это помогло мне, так как я хотел использовать только
xmlHttpRequest
и опубликовать объект как данные формы:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
источник