Sling Academy
Home/JavaScript/Implement Old-School Data Fetching Using JavaScript XMLHttpRequest

Implement Old-School Data Fetching Using JavaScript XMLHttpRequest

Last updated: December 14, 2024

In the early days of web development, before the introduction of more modern APIs like fetch or third-party libraries such as Axios, developers primarily relied on XMLHttpRequest for data fetching in JavaScript. Though it may seem outdated in 2023, XMLHttpRequest remains an essential part of the history of the web, and understanding it can provide insights into how asynchronous operations work under the hood.

Getting Started with XMLHttpRequest

To initiate a data request using XMLHttpRequest, the basic structure is as follows: you create an instance of XMLHttpRequest, set up an event handler to process the server response, and then make the request using the open and send methods.

Basic Example

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts", true);
xhr.onload = function() {
  if (xhr.status >= 200 && xhr.status < 300) {
    console.log(xhr.responseText);
  } else {
    console.log('Request failed with status: ' + xhr.status);
  }
};
xhr.send();

In the above example, a GET request is made to a public API endpoint. We specify the HTTP method and URL with xhr.open() and use the onload event to handle a successful response.

xhr.responseText contains the data returned from the server, which is available as a string. Note the use of status codes to verify a successful response (typically, 2xx codes indicate success).

Handling Different Response Types

The XMLHttpRequest object offers flexibility when dealing with different data formats, such as plain text, XML, or JSON.

Parsing JSON Responses

xhr.onload = function() {
  if (xhr.status === 200) {
    var jsonResponse = JSON.parse(xhr.responseText);
    console.log(jsonResponse);
  } else {
    console.error('Failed to fetch data');
  }
};

Here, we parse the response as JSON using JSON.parse(), making it easy to work with JavaScript objects.

Retrieving XML Data

Similarly, for XML responses, the responseXML property provides us with a Document object to easily traverse XML nodes.

xhr.onload = function() {
  if (xhr.status === 200) {
    var xmlData = xhr.responseXML;
    console.log(xmlData.getElementsByTagName("title")[0].childNodes[0].nodeValue);
  }
};

Handling Errors and States

Error handling is vital when performing network requests. The XMLHttpRequest has an onerror event to handle network errors, and you can monitor upload/download progress with onprogress.

xhr.onerror = function() {
  console.error('Network error occurred');
};

The readyState attribute helps in understanding the progress of the request, ranging from 0 (uninitialized) to 4 (request completed and response is ready).

Advanced Usage

Besides basic GET requests, XMLHttpRequest supports more complex operations such as POST requests and setting headers for requests.

Sending Data with POST

var xhr = new XMLHttpRequest();
xhr.open("POST", "https://your-api-endpoint.com");
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");

xhr.onload = function() {
  console.log(xhr.responseText);
};

xhr.send(JSON.stringify({ title: 'foo', body: 'bar', userId: 1 }));

In this example, we prepare a request to send JSON data to a server by setting the appropriate Content-Type header.

Conclusion

Now that you have a better understanding of how XMLHttpRequest works, it should furnish you with a solid foundation when diving into asynchronous operations in JavaScript. While modern alternatives like the fetch API are favored for their simplicity and promise-based approach, knowing how to operate with XMLHttpRequest remains invaluable for working in legacy systems and offers deeper insight into the web's asynchronous capabilities.

Previous Article: Load Dynamic Content Without Reloading via XMLHttpRequest in JavaScript

Series: Web APIs – JavaScript Tutorials

JavaScript

You May Also Like

  • Handle Zoom and Scroll with the Visual Viewport API in JavaScript
  • Improve Security Posture Using JavaScript Trusted Types
  • Allow Seamless Device Switching Using JavaScript Remote Playback
  • Update Content Proactively with the JavaScript Push API
  • Simplify Tooltip and Dropdown Creation via JavaScript Popover API
  • Improve User Experience Through Performance Metrics in JavaScript
  • Coordinate Workers Using Channel Messaging in JavaScript
  • Exchange Data Between Iframes Using Channel Messaging in JavaScript
  • Manipulating Time Zones in JavaScript Without Libraries
  • Solving Simple Algebraic Equations Using JavaScript Math Functions
  • Emulating Traditional OOP Constructs with JavaScript Classes
  • Smoothing Out User Flows: Focus Management Techniques in JavaScript
  • Creating Dynamic Timers and Counters with JavaScript
  • Load Dynamic Content Without Reloading via XMLHttpRequest in JavaScript
  • Manage Error Handling and Timeouts Using XMLHttpRequest in JavaScript
  • Handle XML and JSON Responses via JavaScript XMLHttpRequest
  • Make AJAX Requests with XMLHttpRequest in JavaScript
  • Customize Subtitle Styling Using JavaScript WebVTT Integration
  • Integrate Accessibility Features via the WebVTT API in JavaScript