Easily send form data with fetch – step-by-step guide with sample code

Table of content

  1. Introduction
  2. Overview of Fetch API
  3. Step 1: Creating the HTML Form
  4. Step 2: Getting Form Data with JavaScript
  5. Step 3: Sending Form Data with Fetch
  6. Handling the Response
  7. Handling Errors
  8. Conclusion


Sending form data with fetch is a common task in web application development. This process involves capturing user input from a form and sending it to a server for processing. While there are many ways to perform this task, the fetch API provides a simple and elegant solution that is easy to use and highly effective.

In this guide, we will provide a step-by-step tutorial on how to send form data using fetch. We will cover everything from capturing form data to sending it to the server and receiving a response. We will also provide sample code to demonstrate the process and explain key concepts along the way.

Whether you are a seasoned web developer or a newcomer to the world of programming, this guide will provide you with the knowledge and skills you need to effectively send form data using fetch. So, let’s get started!

Overview of Fetch API

The Fetch API is a web standard interface used to make HTTP requests in JavaScript. Introduced in ES6, Fetch API provides a simpler and more flexible way to make asynchronous requests compared to its predecessor XMLHttpRequest (XHR).

Fetch API uses Promises to handle responses, which makes it easier to chain multiple requests and operations while handling errors efficiently. The Promise-based approach to handling asynchronous operations in Fetch API is more intuitive and cleaner compared to callback-based approaches, which are error-prone and complex.

Fetch API supports various request methods like GET, POST, PUT, DELETE, etc., and can handle various data types like JSON, FormData, Blob, etc. Fetch API also allows for customizing request headers and parsing response headers.

Fetch API can be used in browsers and Node.js, and it has become a popular choice for fetching data in modern web applications due to its simplicity, flexibility, and efficiency. With Fetch API, sending form data has become easier than ever before, making it a popular choice for building web applications that require form submissions.

Step 1: Creating the HTML Form

To begin sending form data with fetch, the first step is to create the HTML form that will collect the data. This can be done using any text editor, such as Sublime or Visual Studio Code, so long as the file is saved with a .html extension.

The form should contain input fields for each piece of data that needs to be collected. Use the <form> tag to indicate the start of the form, and the action attribute to specify where the data will be sent once it’s been collected. For example, if the form data will be sent to a Python script on the server, the action attribute might look like this:

<form action="example_script.py" method="post">

This tells the browser to send the contents of the form to the Python script at the URL example_script.py. Change this to suit your needs.

Next, add input fields for each piece of data that needs to be collected. These can be text fields, drop-down menus, checkboxes, radio buttons, or any other type of form input. Each input field should have a unique name attribute, so that the server knows which piece of data it corresponds to. For example, a text input for a user’s name might look like this:

<label for="name">Name:</label>
<input type="text" id="name" name="name">

This creates a label for the input field, and assigns it the unique name attribute “name”, which is what the server will use to identify this piece of data. Repeat this process for each input field that needs to be included in the form.

Once you’ve finished creating the form, save the HTML file and move on to the next step: powering the form with JavaScript.

Step 2: Getting Form Data with JavaScript

To get form data with JavaScript, we can use the FormData object. This object provides a way to easily construct sets of key/value pairs representing form fields and values. We can then use the fetch API to send this data to the server.

To create a new FormData object, we can simply call the constructor with no arguments. Then, we can use the append method to add form fields and values to the object. The first argument to append is the name of the field, and the second argument is the value. We can add as many fields as we need.

For example, to create a FormData object with two fields, "name" and "email", we can do the following:

const formData = new FormData();
formData.append('name', 'John Doe');
formData.append('email', 'jdoe@example.com');

Now we have a FormData object with the fields "name" and "email", and their respective values.

In the next step, we will see how to use this FormData object to send the data to the server using the fetch API.

Step 3: Sending Form Data with Fetch

To send form data with fetch, we need to create a new instance of the FormData object and pass the form element as an argument. We can then use this FormData object as the body of our fetch request. Here is the code for sending form data with fetch:

const formElement = document.querySelector('form')
const formData = new FormData(formElement)

fetch('/submit', {
  method: 'POST',
  body: formData

In this code, we first select the form element using querySelector. We then create a new instance of the FormData object and pass the form element as an argument. This creates a new FormData object that contains all the values of the form fields.

We then use this FormData object as the body of our fetch request. We specify the HTTP method (POST) and the URL we want to send the form data to (/submit). We also pass in the FormData object as the body property of the fetch options object.

This will send the form data to the specified URL using a POST request. The server can then process the form data and send a response back to the client if necessary.

Handling the Response

After sending data using fetch, the server will respond with a message that contains the status of the request and any data returned by the server. In order to handle this response in our JavaScript code, we will need to use the .then() method on the fetch call.

The .then() method takes a callback function that will be called with the response object once the request has been completed. The response object contains a number of properties, including the status code and the data returned by the server.

To retrieve the data returned by the server, we need to call the .json() method on the response object. This method returns a Promise that resolves to the JSON data returned by the server.

Here is an example of how we can handle the response from a fetch call:

fetch('https://example.com/api/data', {
  method: 'POST',
  body: formData
}).then(response => {
  if (response.ok) {
    return response.json();
  } else {
    throw new Error('Failed to retrieve data from server.');
}).then(data => {
}).catch(error => {

In this example, we first check the ok property of the response object to see if the server returned a successful response. If it is successful, we can call the .json() method on the response object to retrieve the JSON data returned by the server. If there is an error, we throw an error and catch it in the catch() method.

Overall, from a fetch call is a crucial step in working with form data in our JavaScript code. By properly , we can retrieve any data returned by the server and use it to update our web page or perform other actions as needed.

Handling Errors


When sending form data with fetch, it's important to account for potential errors that may occur during the process. One common error is a network error, which could occur if the user loses internet connection before the request is completed. Another possible error is a server error, which could occur if the server is unavailable or experiences an internal error.

To handle these errors, you can use a try-catch block around your fetch request. Within the catch block, you can specify the types of errors you want to handle, and then provide a specific response or error message to display to the user. For example:

try {
  const response = await fetch(url, options);
  const data = await response.json();
} catch (error) {
  if (error instanceof SyntaxError) {
  } else if (error instanceof TypeError) {
  } else {
    console.error('An error occurred:', error);

In this example, we are using a try block to send the fetch request. If an error occurs, the catch block will execute. We have specified two types of errors to handle – SyntaxError and TypeError. For each of these error types, we are logging the error message to the console. If any other type of error occurs, we are logging a general error message.

By in this way, you can provide better feedback to the user and ensure that your application continues to function smoothly even if errors occur. Be sure to test your fetch requests thoroughly and consider all possible errors to provide the best user experience.


In , sending form data using the fetch API in JavaScript is a simple and efficient way to handle web form submissions. By following the step-by-step guide and example code provided, developers can easily incorporate this functionality into their web applications. The ability to send form data asynchronously and without a page refresh can enhance the user experience and improve the overall performance of the application. Additionally, because fetch is built into modern browsers, there is no need for additional plug-ins or libraries. With some basic knowledge of HTML, CSS, and JavaScript, developers can easily take advantage of this powerful feature. Overall, fetch provides a reliable, efficient, and easy-to-use method for sending form data in web applications.

Throughout my career, I have held positions ranging from Associate Software Engineer to Principal Engineer and have excelled in high-pressure environments. My passion and enthusiasm for my work drive me to get things done efficiently and effectively. I have a balanced mindset towards software development and testing, with a focus on design and underlying technologies. My experience in software development spans all aspects, including requirements gathering, design, coding, testing, and infrastructure. I specialize in developing distributed systems, web services, high-volume web applications, and ensuring scalability and availability using Amazon Web Services (EC2, ELBs, autoscaling, SimpleDB, SNS, SQS). Currently, I am focused on honing my skills in algorithms, data structures, and fast prototyping to develop and implement proof of concepts. Additionally, I possess good knowledge of analytics and have experience in implementing SiteCatalyst. As an open-source contributor, I am dedicated to contributing to the community and staying up-to-date with the latest technologies and industry trends.
Posts created 1855

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top