You want to submit form data in an asynchronous HTTP request using JavaScript (AJAX). You may want to do this to add custom client-side form validation.
Suppose you have the following form, with a name and email input:
Here we select the form element and then bind a submit event handler function to the form using the jQuery
submit()
method. We prevent the form from being submitted to the server by calling the
Event.preventDefault()
method in the event handler. This allows us to control the form submission with jQuery.
We then get the value of the inputs and use the
ajax()
method to post the data to the server. The body data type in
data
must match the “Content-Type” header.
You can also use the jQuery
post()
method to specifically make AJAX POST requests.
After a successful POST request, the
done()
method is called. If an error occurs, the
fail()
method is called. You can use these callback functions for client-side data validation. The
always()
callback runs if the request is successful or if there is an error.
You can also use vanilla JavaScript to make an AJAX request using the
Fetch API
:
const form = document.querySelector('form');
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
body: JSON.stringify(data),
if (!response.ok) {
throw new Error('Network response was not OK');
return response.json();
form.addEventListener('submit', (e) => {
const formInputs = form.getElementsByTagName('input');
let formData = {};
for (let input of formInputs) {
formData[input.name] = input.value;
e.preventDefault();
postData('http://localhost:1337/api/form', formData)
.then((data) => {
console.log({ data });
.catch((err) => {
console.error(err);