Search code examples
javascriptajaxjqueryjquery-load

What's a good way to display a loading image until an ajax query completes?


Right now it contacts the server every time a user toggles "Comments (X)"

I'd like to make it so as soon as a user clicks ".info .reply" (Comments (X)), an ajax loader appears just until the data is finished loading, then the loader disappears.

// Replies - Toggle display of comments
$('.info .reply').click( function() {
    $('.reply', this.parentNode.parentNode).toggle();
    return false;
});

// Load comments
$('.info .reply', this).mousedown( function() {
    var id = $('form #id', this.parentNode.parentNode).val();
    $.ajax({ url: location.href, type: 'post', data: 'id=' + id, dataType: 'json',
        success: function(data) {
            for (var i in data) {
                // Do AJAX Updates
            }
        }
    });
    return false;
});

What's the proper way to do this?

Thanks!


Solution

  • Basically

    Show the image on mousedown using show() or fadeIn() or whatever tickles your fancy, then hide it inside your success callback. Like this

    $('.info .reply', this).mousedown( function() {
        $("#loading-image").show(); // Show the progress indicator
        var id = $('form #id', this.parentNode.parentNode).val();
        $.ajax({ url: location.href, type: 'post', data: 'id=' + id, dataType: 'json',
            success: function(data) {
                $("#loading-image").hide(); // Hide the progress indicator
                for (var i in data) {
                    // Do AJAX Updates
                }
            }
        });
        return false;
    });