Last Updated: February 25, 2016
·
2.336K
· joseluisq

How to load only the body content from some static html page via Ajax.


// main.js

(function($){

    /**
        For example:
        You might load pages for each links on your menu.
        Eg.
            <ul>
                <li><a href="#about">About</a></li>
                <li><a href="#services">Services</a></li>
                <li><a href="#contact">Contact</a></li>
            </ul>
    **/

    var url;
    $('#mymenu a').click(function(e){
        // Prevent the open link
        e.preventDefault();

        // Retrieve the link value and replace hash mark
        url = $(this).attr('href').replace('#', '');

        // Sets the correct page
        load_page( url + '.html' );
    });



    // The body content logic.
    function body_content_logic() {
       // Here your stuff for body content loaded data.

    }


    // Load some body content on any page.
    function load_page(url) {
      $.ajax({
            url: url,
            dataType: 'text',
            type: 'get',
            success: function(str,b,xhr){

                // Retrieve the title text (if you want)
                var title = str.match(/<(title)>[\s\S]*?<\/\1>/gi)[0].replace('<title>', '').replace('</title>', '');

                // Retrieve the body content
                str = str.match(/<(body)>[\s\S]*?<\/\1>/gi);
                str = str[0].replace('<body>','').replace('</body>', '');


                // Pay attention here:
                // All code here in this example is saved in my case at "main.js" path.
                // So, you need remove this script (or scripts) from your page "before" you embed the body content
                // for avoid duplicity code on the fly.
                str = str.replace('<script src="main.js"></script>', '');


                // Ok, now replace html body content on the current page.
                $('body').empty().html(str);


                // Change history page url (if you want)
                window.history.pushState({}, title, url);

                // Change the page's title (if you want)
                document.title = title;


                // Finally, call the method again for repeat the cycle
                body_content_logic();

            }
      });
    }


    // Apply your logic for current body content
    body_content_logic();


}(jQuery))