Futuros buscadores de internet:
Para los nuevos navegadores (a partir de 2018: Chrome, Firefox, Safari, Opera, Edge y la mayoría de los navegadores móviles, pero no IE), fetch
es una API estándar que simplifica las llamadas de red asíncronas (para las que solíamos necesitar XMLHttpRequest
o jQuery $.ajax
).
Aquí hay una forma tradicional:
<form id="myFormId" action="/api/process/form" method="post">
<!-- form fields here -->
<button type="submit">SubmitAction</button>
</form>
Si se le entrega un formulario como el anterior (o lo creó porque es html semántico), puede envolver el fetch
código en un detector de eventos como se muestra a continuación:
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
});
});
(O, si como el póster original desea llamarlo manualmente sin un evento de envío, simplemente coloque el fetch
código allí y pase una referencia al form
elemento en lugar de usarlo event.target
).
Documentos:
Recuperar:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Otro:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
Esa página en 2018 no menciona fetch (todavía). Pero menciona que el truco target = "myIFrame" está en desuso. Y también tiene un ejemplo de form.addEventListener para el evento 'submit'.