Przyszli poszukiwacze internetu:
W przypadku nowych przeglądarek (od 2018: Chrome, Firefox, Safari, Opera, Edge i większość przeglądarek mobilnych, ale nie IE) fetch
jest to standardowy interfejs API, który upraszcza asynchroniczne wywołania sieciowe (do których potrzebowaliśmy XMLHttpRequest
lub jQuery $.ajax
).
Oto tradycyjna forma:
<form id="myFormId" action="/api/process/form" method="post">
<!-- form fields here -->
<button type="submit">SubmitAction</button>
</form>
Jeśli otrzymałeś formularz taki jak powyższy (lub utworzyłeś go, ponieważ jest to semantyczny html), możesz opakować fetch
kod w detektor zdarzeń, jak poniżej:
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
});
});
(Lub, jeśli tak jak oryginalny plakat chcesz wywołać go ręcznie bez zdarzenia przesyłania, po prostu umieść fetch
tam kod i przekaż odwołanie do form
elementu zamiast używać event.target
).
Dokumenty:
Pobierz:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Inne:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
Ta strona w 2018 roku nie wspomina o pobieraniu (jeszcze). Ale wspomina, że sztuczka target = "myIFrame" jest przestarzała. Zawiera również przykład form.addEventListener dla zdarzenia „submit”.