Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Listen again to `$(window).load` after ajax request

I'm loading an AJAX request of another HTML page, which is then inserted into a DOM element of the current page.

The page I'm getting through AJAX includes link references to stylesheets, as well as multiple images, which must be loaded from the server.

I want to execute code after all resources from the AJAX call loads, including referenced stylesheets and images.
Note that these stylesheets and images are not directly loaded from AJAX but are loaded as a result of the insertion of the HTML from the AJAX call.

Thus, I'm not looking for the success: callback, but rather like another $(window).load(function () { ... }); after the AJAX call (I've tried listening again to $(window).load without success.

Let me know if you need more code.

like image 493
Albert Xing Avatar asked Apr 25 '13 04:04

Albert Xing


Video Answer


1 Answers

Checking whether a stylesheet has been loaded is difficult to do -- especially cross-browser. This article suggests having an element that will be changed by a known rule in the loaded stylesheet and polling to check whether its style has been changed to detect loading.

Images are easier, and I would expect they take a lot longer to load so you can probably get away with only checking image loading.

success: function (html) {
    var imageloads = [];
    $(html).find("img").each(function () {
        var dfd = $.Deferred();
        $(this).on('load', function () {
            dfd.resolve();
        });
        //Image was cached?
        if (this.complete) {
            $(this).trigger('load');
        }
        imageloads.push(dfd);
    });
    $.when.apply(undefined, imageloads).done(function () {
        //images finished loading
    });
}
like image 110
Explosion Pills Avatar answered Sep 25 '22 22:09

Explosion Pills