To abort an Ajax request using jQuery, you can utilize the jqXHR object returned by jQuery’s Ajax methods (e.g., $.ajax(), $.get(), $.post()). Here’s a step-by-step guide:
1. Store the jqXHR Object
When initiating the Ajax request, store the returned jqXHR object in a variable:
let xhr;
function makeRequest() {
xhr = $.ajax({
url: 'https://api.example.com/data',
method: 'GET',
success: function(response) {
console.log('Success:', response);
},
error: function(jqXHR, textStatus, errorThrown) {
if (textStatus === 'abort') {
console.log('Request aborted');
} else {
console.error('Error:', errorThrown);
}
}
});
}
2. Abort the Request
Call .abort() on the stored jqXHR object to cancel the request:
function abortRequest() {
if (xhr) {
xhr.abort(); // Aborts the ongoing request
xhr = null; // Reset the variable
}
}
3. Example Usage
HTML:
<button onclick="makeRequest()">Start Request</button>
<button onclick="abortRequest()">Abort Request</button>
Behavior:
- Clicking “Start Request” triggers the Ajax call.
- Clicking “Abort Request” cancels the ongoing request (if active).
Key Notes
- Abort Detection: The
errorcallback checkstextStatus === 'abort'to handle intentional cancellations. - Reset Variable: Set
xhr = nullafter aborting to avoid redundant calls. - Shorthand Methods: Works with
$.get(),$.post(), etc.:
xhr = $.get('https://api.example.com/data', function(response) {
console.log('Success:', response);
});
Advanced: Abort All Pending Requests
Store multiple jqXHR objects in an array to abort all active requests:
const pendingRequests = [];
function makeRequest() {
const xhr = $.ajax({ ... });
pendingRequests.push(xhr);
}
function abortAllRequests() {
pendingRequests.forEach(xhr => xhr.abort());
pendingRequests.length = 0; // Clear the array
}
Why This Works
- The
jqXHRobject wraps the nativeXMLHttpRequestand provides an.abort()method. - Aborting terminates the network request and triggers the
errorcallback withtextStatus: 'abort'.
Use this approach to manage long-running or unnecessary requests efficiently!