AJAX - Offline-First AJAX Using Service Workers

Introduction

Modern web applications often depend on a stable internet connection to exchange data with a server using AJAX. However, users may experience poor connectivity while traveling, working in remote locations, or using unreliable mobile networks. In such situations, traditional AJAX requests fail, causing the application to stop functioning correctly or display error messages.

An Offline-First approach solves this problem by designing the application to work even when the internet is unavailable. Instead of assuming that a network connection is always available, the application first checks whether the required data is already stored locally. If the data exists, it is displayed immediately. If the user performs an action while offline, the request is saved locally and synchronized with the server once the internet connection is restored.

Service Workers play a vital role in implementing Offline-First AJAX applications. They act as a programmable network proxy between the browser and the server, allowing developers to intercept requests, cache resources, and provide offline functionality.


What is Offline-First?

Offline-First is a development strategy where an application continues to function even without internet access. Rather than relying entirely on a remote server, important resources and data are stored locally.

The application performs its tasks using locally available data and synchronizes changes with the server whenever connectivity becomes available.

This approach improves:

  • Reliability

  • User experience

  • Performance

  • Accessibility

  • Productivity


What is a Service Worker?

A Service Worker is a JavaScript file that runs independently of the webpage in the background.

Unlike normal JavaScript code, it does not directly manipulate the webpage's HTML elements.

Instead, it performs tasks such as:

  • Intercepting network requests

  • Managing cached files

  • Enabling offline functionality

  • Synchronizing data

  • Receiving push notifications

  • Performing background updates

Because Service Workers work independently from the webpage, they continue functioning even when the webpage is not actively open.


Role of AJAX in Offline-First Applications

AJAX normally sends asynchronous requests directly to the server.

Example:

  1. User clicks Save.

  2. AJAX sends data.

  3. Server stores data.

  4. Success response is returned.

If there is no internet:

  1. AJAX request fails.

  2. User loses work.

  3. Error message appears.

Offline-First changes this workflow.

Instead of immediately contacting the server:

  1. AJAX sends the request.

  2. Service Worker intercepts it.

  3. Request is stored locally.

  4. User continues working.

  5. When internet returns, stored requests are automatically sent to the server.


How Service Workers Intercept AJAX Requests

Every AJAX request passes through the browser's networking system.

The Service Worker listens for every outgoing request.

Example flow:

User Action

AJAX Request

Service Worker

Internet Available?

Yes → Server

No → Local Storage

Return Cached Response

This interception allows applications to function without changing most AJAX code.


Registering a Service Worker

A Service Worker must first be registered.

Example:

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('service-worker.js')
    .then(() => {
        console.log("Service Worker Registered");
    });
}

The browser downloads and installs the Service Worker.


Service Worker Lifecycle

A Service Worker goes through several stages.

1. Registration

The browser registers the Service Worker.

2. Installation

Required files are cached.

3. Activation

Old caches are removed.

4. Running

The Service Worker begins handling AJAX requests.


Caching Resources

One of the main responsibilities of a Service Worker is storing frequently used resources.

These include:

  • HTML pages

  • CSS files

  • JavaScript files

  • Images

  • Fonts

  • JSON files

  • API responses

Example:

During installation,

Install Event

↓

Cache Application Files

↓

Store Resources

↓

Offline Ready

The application can now load even without internet.


Different Types of Cache

Static Cache

Stores files that rarely change.

Examples:

  • HTML

  • CSS

  • Logo

  • JavaScript


Dynamic Cache

Stores API responses requested through AJAX.

Examples:

  • User profile

  • Product list

  • News feed

  • Dashboard data


Runtime Cache

Stores resources while the user is browsing.

Example:

User opens:

Product A

Response cached

User opens Product B

Response cached


Handling AJAX Requests Offline

Suppose a user submits an online form.

Traditional AJAX:

User Clicks Submit

↓

AJAX

↓

Server

↓

Response

Offline:

User Clicks Submit

↓

AJAX

↓

Service Worker

↓

Store Request

↓

Wait for Internet

↓

Send to Server

↓

Success

The user never loses the submitted information.


Local Storage Options

Offline data may be stored using:

IndexedDB

Best for:

  • Large datasets

  • Complex objects

  • Structured records

Example:

  • Orders

  • Customer information

  • Inventory

  • Employee records


Cache Storage

Stores network responses.

Suitable for:

  • Images

  • HTML

  • CSS

  • JavaScript

  • JSON responses


Local Storage

Stores small key-value data.

Suitable for:

  • User preferences

  • Theme settings

  • Language selection

Not recommended for large AJAX data.


Background Synchronization

Background Sync is an important feature used with Service Workers.

Suppose the internet disconnects while sending an order.

Instead of showing an error:

Save Order

↓

Store Locally

↓

Internet Restored

↓

Automatic Upload

↓

Server Response

The user does not need to manually retry.


Fetch Event

The Fetch Event allows the Service Worker to intercept network requests.

Example:

self.addEventListener('fetch', event => {
    console.log("Intercepted Request");
});

Every AJAX request can now be inspected before reaching the server.


Cache-First Strategy

The Service Worker first checks the cache.

AJAX Request

↓

Cache Available?

↓

Yes

↓

Return Cached Data

↓

No

↓

Fetch From Server

↓

Store in Cache

Advantages:

  • Very fast

  • Works offline

  • Reduces server requests

Best for:

  • Images

  • CSS

  • JavaScript


Network-First Strategy

The Service Worker first contacts the server.

AJAX Request

↓

Internet Available?

↓

Yes

↓

Server Response

↓

Update Cache

↓

No

↓

Use Cached Data

Best for:

  • Live scores

  • Stock prices

  • Weather

  • News


Stale-While-Revalidate Strategy

This strategy provides both speed and freshness.

AJAX Request

↓

Return Cached Version

↓

Fetch Latest Version

↓

Update Cache

Users receive instant results while newer data downloads in the background.


Synchronizing Offline Data

Suppose five records are created while offline.

Record 1

Record 2

Record 3

Record 4

Record 5

↓

Stored Locally

↓

Internet Returns

↓

Send Sequentially

↓

Server Updates Database

No data is lost.


Benefits of Offline-First AJAX

  • Works without internet connectivity.

  • Improves application reliability.

  • Reduces loading time through cached data.

  • Minimizes unnecessary server requests.

  • Enhances user experience.

  • Prevents data loss during network interruptions.

  • Supports automatic synchronization after reconnection.

  • Reduces bandwidth usage.

  • Provides faster application startup.

  • Increases productivity for users in low-connectivity environments.


Limitations

  • More complex to develop than traditional AJAX applications.

  • Cache management requires careful planning.

  • Synchronization conflicts may occur if the same data is modified both offline and online.

  • Browsers impose storage limits for cached data.

  • Not all browser features are uniformly supported.

  • Security considerations must be addressed when storing sensitive information locally.


Real-World Applications

Offline-First AJAX with Service Workers is widely used in:

  • Email applications that allow reading and composing messages offline.

  • Note-taking applications where notes synchronize when connectivity returns.

  • E-commerce platforms that temporarily store shopping cart updates.

  • Field service applications used by technicians in remote areas.

  • Healthcare systems that record patient information during connectivity outages.

  • Educational platforms that cache lessons and assignments for offline study.

  • Banking applications that allow viewing previously downloaded account information.

  • Inventory management systems that synchronize stock updates after reconnecting.

  • Customer relationship management (CRM) applications used by sales representatives in the field.

  • Travel applications that provide offline access to itineraries, maps, and booking information.


Best Practices

  • Cache only essential application resources.

  • Use IndexedDB for storing large or structured offline data instead of Local Storage.

  • Select an appropriate caching strategy based on the type of content.

  • Encrypt or protect sensitive data stored locally.

  • Regularly remove outdated cache entries to conserve storage.

  • Test the application under different network conditions, including offline mode.

  • Handle synchronization conflicts gracefully to avoid data inconsistencies.

  • Display clear indicators when the application is operating offline or synchronizing data.


Conclusion

Offline-First AJAX using Service Workers enables web applications to remain functional even when internet connectivity is unavailable. By intercepting AJAX requests, caching resources, storing user actions locally, and synchronizing data once the network is restored, developers can create applications that are faster, more reliable, and resilient to connectivity issues. This approach is particularly valuable for applications used in environments where consistent internet access cannot be guaranteed, ensuring that users can continue working without interruptions or losing important data.