Search code examples
jqueryjquery-pluginsloadhashchange

jquery: problem with the hashchange with ajax


I am using an onhashchange plugin, but I have a problem to get it right when I want to load pages through ajax.

Here is my jquery,

    $(document).ready(function(){

    $(window).hashchange(function() {
        var hash = location.hash;
        var array_url = hash.split('#');
        var page = $(array_url).last()[0];
        $('#content').load( page + '.php', function(){
        });
    });

    $('.clickme').click(function(){

        var url = $(this).attr('href');
        var array_url = url.split('#');
        var page = $(array_url).last()[0];

        location.hash = url;

        $('#content').load( page + '.php', function(){
        });

        return false;
    });

});

the html,

<a href="#1" class="clickme">1<a>
<a href="#2" class="clickme">2<a>

<div id="content">
</div>

The problem is the ajax page will be loaded twice or more when the link is clicked after the hash has changed.

How can I fix this?

Thanks.


Solution

  • You are doing the load twice:

    $(window).hashchange(function() {
        var hash = location.hash;
        var array_url = hash.split('#');
        var page = $(array_url).last()[0];
        $('#content').load( page + '.php', function(){ //ONCE
        });
    });
    
    $('.clickme').click(function(){
    
        var url = $(this).attr('href');
        var array_url = url.split('#');
        var page = $(array_url).last()[0];
    
        location.hash = url; //GOTO HASH CHANGE ^^
    
        $('#content').load( page + '.php', function(){  //TWICE
        });
    
        return false;
    });