jquery:ajax 的 hashchange 问题

发布于 2024-11-17 19:06:18 字数 927 浏览 4 评论 0原文

我正在使用 onhashchange 插件,但是当我想通过 ajax 加载页面时,我遇到了一个问题。

这是我的 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;
    });

});

html,

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

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

问题是在 hash 更改后单击链接时,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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

习惯成性 2024-11-24 19:06:18

您正在执行两次负载:

$(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;
});

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;
});
不醒的梦 2024-11-24 19:06:18

摆脱点击侦听器内部的 $('#content').load() 调用。这样,当您更改哈希值时,只有 hashchange 侦听器会处理 ajax 调用。

Get rid of the $('#content').load() call inside of the click listener. That way when you change the hash, only the hashchange listener will take care of the ajax call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文