Naja AJAX Library for Nette Framework

3.3.3 · active · verified Sun Apr 19

Naja is a modern, full-featured client-side AJAX library specifically designed for seamless integration with the Nette Framework. It provides robust capabilities for handling asynchronous requests, managing browser history states, and dynamically updating UI snippets, enabling developers to build highly interactive web applications with minimal JavaScript boilerplate. Currently stable at version 3.3.3, Naja maintains an active release cadence, frequently delivering minor enhancements and bug fixes. Key differentiators include its tight coupling with Nette's server-side AJAX responses, thorough testing across modern browsers (Chromium, Firefox, WebKit), and a strong focus on providing a reliable, performant AJAX experience tailored for the Nette ecosystem, allowing for progressive enhancement of traditional server-rendered applications. It is written using modern JavaScript and compiled for broad browser compatibility.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates how to initialize Naja and subscribe to its core lifecycle events to handle Nette AJAX interactions and custom snippet updates.

import naja from 'naja';

document.addEventListener('DOMContentLoaded', () => {
    // Initialize Naja. This sets up event listeners for AJAX interactions
    // on elements like <a data-nette-ajax> and <form data-nette-ajax>.
    naja.initialize();

    // Listen to Naja's lifecycle events for debugging or custom logic.
    naja.addEventListener('init', () => {
        console.log('Naja initialized and ready to handle Nette AJAX requests.');
    });

    naja.addEventListener('interaction', (event) => {
        console.log('AJAX interaction started:', event.detail.element.tagName, event.detail.url);
    });

    naja.addEventListener('start', (event) => {
        console.log('AJAX request is about to be sent.');
        // You could show a loading spinner here
    });

    naja.addEventListener('success', (event) => {
        console.log('AJAX request successful.');
        // Hide loading spinner
    });

    naja.addEventListener('error', (event) => {
        console.error('AJAX request failed:', event.detail.error);
        // Handle error, e.g., display an error message
    });

    // Example: Custom snippet handler for specific element updates
    naja.snippetHandler.addEventListener('afterUpdate', (event) => {
        const { snippet, content } = event.detail;
        if (snippet && snippet.id === 'my-dynamic-content') {
            document.getElementById('my-dynamic-content').innerHTML = content;
            console.log(`Snippet #${snippet.id} updated.`);
        }
    });
});

view raw JSON →