Timeouts and Aborts
Timeouts and Aborts: free step-by-step lesson with examples, common mistakes, and interview tips — part of jQuery Tutorial on Toolliyo Academy.
On this page
jQuery Tutorial · Lesson 48 of 100
Timeouts and Aborts
Setup & DOM ✓ → Events Effects AJAX → Perf & Integrate → Ship & Projects
Events Effects AJAX · 2 — Interact · ~6 min · AJAX and APIs
What is this?
Set timeout in $.ajax so hung calls fail fast. Keep the jqXHR and call .abort() when the user navigates away or starts a newer request.
Why should you care?
Stale QueryVerse responses overwriting newer filters is a classic race — abort the previous call.
See it live — copy this example
Examples include the jQuery 3.7 CDN. Paste into an HTML file or use Run Example to preview.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>QueryVerse</title>
<style>
body { font-family: system-ui, sans-serif; margin: 1.25rem; }
.box { padding: .75rem; border: 1px solid #ccc; border-radius: 8px; margin: .5rem 0; }
.muted { color: #666; }
button { margin-right: .35rem; margin-top: .35rem; }
input, select, textarea { margin: .25rem 0; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: .4rem .55rem; text-align: left; }
.hidden { display: none; }
.row-odd { background: #f7f7f7; }
.active { font-weight: 700; }
.toast { background: #111; color: #fff; padding: .5rem .75rem; border-radius: 6px; }
</style>
</head>
<body>
<input id="q" placeholder="Type to search users">
<pre id="out" class="box muted"></pre>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$(function () {
var current = null;
$('#q').on('input', function () {
var q = $(this).val().trim();
if (current) current.abort();
if (!q) { $('#out').text(''); return; }
$('#out').text('Searching…');
current = $.ajax({
url: 'https://jsonplaceholder.typicode.com/users',
dataType: 'json',
timeout: 5000
}).done(function (users) {
var hits = users.filter(function (u) {
return u.name.toLowerCase().indexOf(q.toLowerCase()) !== -1;
}).map(function (u) { return u.name; });
$('#out').text(hits.join('\n') || 'No hits');
}).fail(function (xhr, status) {
if (status === 'abort') return;
$('#out').text('fail: ' + status);
});
});
});
</script>
</body>
</html>
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Aborted requests invoke fail with status "abort" — ignore those for toasts.
- Timeouts use status "timeout".
- Replace previous jqXHR on each keystroke (or debounce).
Practice next
- Type quickly and note aborts in Network.
- Handle timeout message separately.
- Debounce input by 200ms as an upgrade.
- Debounce + abort together.
- Abort in pagehide/beforeunload.
Remember
timeout fails hung calls. abort cancels in flight. Ignore abort in UX.
Typeahead race
A Practo clinic QueryVerse patient search must not show results for an older query string.
Outcome: abort() on each new input keeps the list truthful.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!