Save data from AJAX request in variable (jQuery)
Categories:
Mastering AJAX Data: Storing Responses in JavaScript Variables with jQuery

Learn how to effectively capture and store data returned from an AJAX request into JavaScript variables using jQuery, enabling dynamic content updates and further processing.
When building dynamic web applications, fetching data from a server without reloading the entire page is a common requirement. AJAX (Asynchronous JavaScript and XML) makes this possible, and jQuery simplifies the process significantly. However, a frequent challenge for developers is correctly capturing the data returned by an AJAX call and storing it in a JavaScript variable for later use. This article will guide you through the proper techniques to achieve this, addressing common pitfalls and best practices.
Understanding Asynchronous Operations
The 'A' in AJAX stands for Asynchronous, which is crucial to understand. This means that when you make an AJAX request, your JavaScript code does not wait for the server's response before continuing to execute subsequent lines of code. The response arrives at some point in the future, and you need to provide a mechanism (a callback function) to handle that response when it becomes available. Attempting to access the AJAX response immediately after initiating the request will result in an undefined value, as the data hasn't arrived yet.

Asynchronous AJAX Request Flow
Storing AJAX Response in a Variable
The key to storing AJAX response data is to perform the assignment within the success callback function of your AJAX request. This function is executed only after the server has successfully responded and the data is available. jQuery's $.ajax()
, $.get()
, and $.post()
methods all provide a way to define such a callback.
let myData = null; // Declare a variable to hold the data
$.ajax({
url: 'your_api_endpoint.php',
method: 'GET',
dataType: 'json', // Expecting JSON data
success: function(response) {
// This code runs ONLY after the server responds successfully
myData = response; // Assign the response data to your variable
console.log('Data received and stored:', myData);
// You can now work with myData here
// For example, update the DOM:
$('#output').text('Received: ' + myData.message);
},
error: function(xhr, status, error) {
console.error('AJAX Error:', status, error);
}
});
// IMPORTANT: myData will likely still be null here because the AJAX call is asynchronous.
// The success callback hasn't run yet when this line executes.
console.log('myData immediately after AJAX call (likely null):', myData);
Basic jQuery AJAX request with data storage in success callback
success
callback if you intend to use it globally or in a wider scope. However, remember that its value will only be updated inside the callback once the AJAX request completes.Handling Data Outside the Callback (Promises)
While assigning data within the success callback is fundamental, you might need to use that data in other parts of your application that are not directly nested within the callback. This is where JavaScript Promises (which jQuery's AJAX methods return) become incredibly useful. Promises allow you to chain operations and handle asynchronous results more cleanly.
let globalData = null;
function fetchData() {
return $.ajax({
url: 'another_api_endpoint.json',
method: 'GET',
dataType: 'json'
});
}
// Call the function that returns the AJAX promise
fetchData()
.done(function(response) {
// This runs on success
globalData = response; // Store the data
console.log('Global data updated via promise:', globalData);
processGlobalData(); // Call another function that needs the data
})
.fail(function(xhr, status, error) {
// This runs on error
console.error('Failed to fetch data:', status, error);
});
function processGlobalData() {
if (globalData) {
console.log('Processing global data:', globalData);
// Perform operations with globalData here
} else {
console.log('Global data not yet available.');
}
}
Using jQuery Promises (.done, .fail) to manage AJAX data
$.ajax()
call like return $.ajax(...)
. This will return the jQuery XHR object (a Promise-like object), not the actual data. The data is only available inside the .done()
or success
callback.Best Practices for AJAX Data Handling
To ensure robust and maintainable code when dealing with AJAX data, consider these best practices:
1. Scope Your Variables Appropriately
Decide whether the data needs to be globally accessible, or if it can be confined to a specific function or module. Minimize global variables to prevent conflicts.
2. Handle Errors Gracefully
Always include an error
callback or a .fail()
handler to catch network issues, server errors, or malformed responses. Provide user feedback when something goes wrong.
3. Provide User Feedback
When making AJAX requests, show a loading spinner or message to the user. Hide it once the request completes (either success or error) to improve user experience.
4. Validate Server Responses
Even if the AJAX request is successful, the server might return unexpected data. Always validate the structure and content of the response
object before using it.
5. Avoid Synchronous AJAX (Deprecated)
While async: false
exists, it's deprecated and should be avoided. It freezes the browser UI, leading to a poor user experience. Always embrace the asynchronous nature of AJAX.