使用$(window).bind('hashchange',函数(e)调用两次ajax搜索函数

时间:2013-08-08 05:48:45

标签: javascript jquery ajax

我正在研究ajax search.ajax函数是在onblur event.below上调用的。示例代码。

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;

}

我点击了浏览器后退或前进按钮时,我还使用了另一个函数来使用url中的哈希值来恢复serch。这对后退和前进按钮很有效。

$(window).bind( 'hashchange', function(e) {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
 });

但我在搜索时遇到问题ajax搜索功能被调用两次。我正在搜索时调用$(window).bind('hashchange')。有没有办法只为浏览器后退和前进按钮或任何其他解决方案调用上述函数?

我该如何解决这个问题?

我会感激任何帮助..

2 个答案:

答案 0 :(得分:2)

也许我不太了解,但为什么你将hashchange函数绑定到窗口???它没有任何意义。我在自己的应用程序中有类似的搜索功能。它并不复杂。我的搜索功能(可以说)和你的相同:

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;
}

另一个每页加载执行一次:

(function() {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
})();

因此,如果单击搜索按钮,则会调用搜索功能。哈希发生了变化。添加了浏览器历史记录的一步。

然后又进行了另一次搜索,增加了历史记录中的另一个步骤。

然后回按钮。页面再次加载,因此执行匿名功能。检测到哈希,因此执行搜索。并且散列被更改,但是因为散列与之前相同,所以链接是相同的,然后没有重复的步骤被添加到历史记录中。

答案 1 :(得分:2)

您可以使用信号量:

var searching = false;

function search_ajax(sh_val, sh_act) {
    searching = true;
    ....some search code.....
    window.location.hash = sh_val + '@' + sh_act;
    searching = false;
}

$(window).bind('hashchange', function (e) {
    if (searching) 
        return false;
    var page = location.hash.slice(1);
    if (page != "" && page != "p") {
        search_ajax(page, 'catsh');
    }
    return false;
});