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
error
callback checkstextStatus === 'abort'
to handle intentional cancellations. - Reset Variable: Set
xhr = null
after 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
jqXHR
object wraps the nativeXMLHttpRequest
and provides an.abort()
method. - Aborting terminates the network request and triggers the
error
callback withtextStatus: 'abort'
.
Use this approach to manage long-running or unnecessary requests efficiently!