6

如何为使用 AJAX 获取的页面或内容“添加书签”?

看起来如果我们只是将细节添加到“锚点”中,然后,使用路由甚至在 PHP 代码或 Ruby on Rails 的 route.rb 中捕获该部分,然后显示内容或页面,这似乎很容易因此?(显示整个页面或部分内容)

那么它可以很简单吗?看起来这就是facebook的做法。还有什么其他好的方法可以做到吗?

4

5 回答 5

7

更新:现在有 HTML5 History API(pushState、popState),它弃用了 HTML4hashchange功能。History.js提供跨浏览器兼容性和 HTML4 浏览器的可选 hashchange回退。

要存储页面的历史记录,最流行且功能齐全/受支持的方式是使用 hashchanges。这意味着您yoursite/page.html#page1可以yoursite/page.html#page2跟踪该更改,并且因为我们使用的是哈希,所以它可以被书签和后退和前进按钮拾取。

您可以使用 jQuery History 项目http://www.balupton.com/projects/jquery-history找到绑定到哈希更改的好方法

它还有一个全功能的 AJAX 扩展,允许您轻松地将 Ajax 请求集成到您的状态/哈希中,以将您的网站转换为功能齐全的 Web 2.0 应用程序: http ://www.balupton.com/projects/jquery-ajaxy

他们都在他们的演示页面上提供了很好的文档来解释正在发生的事情和正在发生的事情。

这是一个使用 jQuery History 的示例(取自演示站点):

// Bind a handler for ALL hash/state changes
$.History.bind(function(state){
    // Update the current element to indicate which state we are now on
    $current.text('Our current state is: ['+state+']');
    // Update the page"s title with our current state on the end
    document.title = document_title + ' | ' + state;
});

// Bind a handler for state: apricots
$.History.bind('/apricots',function(state){
    // Update Menu
    updateMenu(state);
    // Show apricots tab, hide the other tabs
    $tabs.hide();
    $apricots.stop(true,true).fadeIn(200);
});

还有一个 jQuery Ajaxy 示例(取自演示站点):

        'page': {
            selector: '.ajaxy-page',
            matches: /^\/pages\/?/,
            request: function(){
                // Log what is happening
                window.console.debug('$.Ajaxy.configure.Controllers.page.request', [this,arguments]);
                // Adjust Menu
                $menu.children('.active').removeClass('active');
                // Hide Content
                $content.stop(true,true).fadeOut(400);
                // Return true
                return true;
            },
            response: function(){
                // Prepare
                var Ajaxy = $.Ajaxy; var data = this.State.Response.data; var state = this.state;
                // Log what is happening
                window.console.debug('$.Ajaxy.configure.Controllers.page.response', [this,arguments], data, state);
                // Adjust Menu
                $menu.children(':has(a[href*="'+state+'"])').addClass('active').siblings('.active').removeClass('active');
                // Show Content
                var Action = this;
                $content.html(data.content).fadeIn(400,function(){
                    Action.documentReady($content);
                });
                // Return true
                return true;

如果您想获取查询字符串参数(so yoursite/page.html#page1?a.b=1&a.c=2),您可以使用:

$.History.bind(function(state){
    var params = state.queryStringToJSON(); // would give you back {a:{b:1,c:2}}
}

因此,请查看这些演示链接以查看它们的实际运行情况,以及所有安装和使用详细信息。

于 2010-08-03T09:20:35.990 回答
1

检查一下,可能会对您有所帮助:

  1. 如何从 javascript 更改 URL:http: //doet.habrahabr.ru/blog/15736/
  2. 如何将应用状态打包到 url:http ://habrahabr.ru/blogs/javascript/92505/
  3. 方法描述:http ://habrahabr.ru/blogs/webstandards/92300/

注意:所有文章都是俄语的,所以要么谷歌翻译它们,要么只是查看代码并猜测细节。

于 2010-08-03T09:42:08.983 回答
1

看看单页界面宣言

于 2011-02-09T16:27:26.750 回答
1

如果您使用 jquery,您可以通过简单的方式做到这一点。只需使用ajaxify插件。它可以管理 ajax 页面的书签和许多其他事情。

于 2010-06-26T08:42:17.603 回答
0

我尝试了很多包。jQuery History 插件似乎是最完整的:

http://github.com/tkyk/jquery-history-plugin

于 2010-08-20T16:15:16.450 回答