Будущие искатели Интернета:
Для новых браузеров (по состоянию на 2018 год: Chrome, Firefox, Safari, Opera, Edge и большинство мобильных браузеров, но не IE) fetch
- это стандартный API, который упрощает асинхронные сетевые вызовы (для которых нам раньше требовались XMLHttpRequest
jQuery $.ajax
).
Вот традиционная форма:
<form id="myFormId" action="/api/process/form" method="post">
<!-- form fields here -->
<button type="submit">SubmitAction</button>
</form>
Если вам передана форма, подобная приведенной выше (или вы создали ее, потому что это семантический html), вы можете fetch
заключить код в прослушиватель событий, как показано ниже:
document.forms['myFormId'].addEventListener('submit', (event) => {
event.preventDefault();
// TODO do something here to show user that form is being submitted
fetch(event.target.action, {
method: 'POST',
body: new URLSearchParams(new FormData(event.target)) // event.target is the form
}).then((resp) => {
return resp.json(); // or resp.text() or whatever the server sends
}).then((body) => {
// TODO handle body
}).catch((error) => {
// TODO handle error
});
});
(Или, если, как и исходный плакат, вы хотите вызвать его вручную без события отправки, просто поместите fetch
туда код и передайте ссылку на form
элемент вместо использования event.target
.)
Docs:
Получить:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Другое:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript На
этой странице в 2018 году не упоминается выборка (пока). Но здесь упоминается, что трюк target = "myIFrame" устарел. А также есть пример form.addEventListener для события submit.