让History.js与Ajax-Solr一起工作

时间:2013-05-24 22:06:08

标签: javascript ajax apache solr history.js

我正在使用Solr 4.3.0并为接口实现Ajax-Solr。但是,Ajax-Solr不会自动保存状态。有一个ParameterStore和ParameterHashStore方法,但它们不适用于旧版浏览器。我使用了google-fu并发现了以下内容,但它没有按预期工作:

https://github.com/evolvingweb/ajax-solr/pull/23

...我想出了更多资源:

<script>
var Manager;
(function ($) { 
Manager.setStore(new AjaxSolr.ParameterHashStore()); 
Manager.store.exposed = [ 'fq', 'q', 'start' ]; 
Manager.init(); 

// Establish Variables
var History = window.History; // Note: We are using a capital H instead of a lower h
    if ( !History.enabled ) {
         // History.js is disabled for this browser.
         // This is because we can optionally choose to support HTML4 browsers or not.
         return false;
     }
     State = History.getState(),

    // Bind to State Change
    History.Adapter.bind(window,'statechange',function(){ // Note: We are using   
statechange instead of popstate
        // Log the State
       var State = History.getState(); // Note: We are using History.getState() instead 
of event.state
        History.log('statechange:', State.data, State.title, State.url);
    });

    // Log Initial State
    History.log('initial:', State.data, State.title, State.url);

})(jQuery);
</script>

但它不起作用。所有浏览器中都有“前进”和“后退”按钮,并且没有任何内容记录到控制台。

我缺少什么,或者v4.3.0现在固有地需要补丁?

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我对AJAX-Solr一无所知。但我认为与你讨论一些事情可能有所帮助。

如果AJAX-Solr以与普通AJAX相同的方式工作,那么AJAX-Solr将执行一些服务器端功能并在客户端输出(当然不刷新实际页面)。因此,您应该将触发ajax调用的函数放在History.Adapter.bind(window,'statechange',function()

关于State = History.getState();它负责返回历史堆栈中的推送状态的状态数据(url,title,ajax参数)。请阅读github上关于hisrory.js的文档。另请注意,您在代码中使用的是逗号而不是分号。此外,您正在调用此函数两次。在Bind函数中只调用一次以获取状态参数并在ajax调用中使用它们(为了在浏览brower后退按钮时刷新页面部分)。

我建议你也阅读Back-Forward buttons of browser are showing weird behaviour. History.js,也许这有助于你理解关于Bind的ajax的定位。

祝你好运。