AJAX与jQuery地址的深层链接

时间:2010-04-27 05:46:04

标签: jquery ajax deep-linking jquery-address

我的网站有很多页面:

  

例如:

     

HOME:http://mywebsite.com/index.html

     

某些页面:   http://mywebsite.com/categorie/somepage.html

我决定使用AJAX动态加载我的页面而不重新加载页面。所以我决定使用 jQuery Address 插件(http://www.asual.com/jquery/address/docs/)以允许深层链接和后向导航:

<script type="text/javascript" src="uploads/scripts/jquery.address-1.2rc.min.js"></script>
<script type="text/javascript">
                $('a').address(function() {
                    return $(this).attr('href').replace(/^#/, '');
                });
</script>

现在,在安装插件后,如果我继续http://mywebsite.com/index.html (HOME)并单击 SOME PAGE 链接,jquery会成功加载{{1没有重新加载页面,我的浏览器上的地址栏显示: http://mywebsite.com/categorie/somepage.html这太棒了!

然而,问题是:如果我复制此动态生成的网址:http://mywebsite.com/index.html/#/categorie/somepage.html 进入Web浏览器地址栏,它将进入我的网站 index.html 页面而不是“SOME PAGE”页面。此外,前进/后退按钮无法正常工作,它们只替换URL栏中的地址,但内容保持不变。

我想我需要编写一些将动态网址与正确的网页相关联的JavaScript规则?

一些帮助将不胜感激。谢谢:))

3 个答案:

答案 0 :(得分:2)

将粘贴网址复制到地址栏正常工作 后退/下一步按钮也正常工作。

应该在那里使其正常工作

任何人都知道如何使#!所以它可以通过谷歌索引吗?

#/ 是一回事?

基本上我在wordpress上的工作:

// ajax setup
$.ajaxSetup({cache:false, success: function() { 
// optional action here
}});  

// Event handlers
$.address.init(function(event) {
  $('#nav li a').address(function() {
  return $(this).attr('href').replace(location.pathname, '');
   });
 }).bind('externalChange', {}, function(event) {
    var post_id; // get page id
    var nav_id; // get nav class
    // for back button 
    switch (true) {
     case (event.value == undefined):
           post_id = 2; nav_id = 'home'; break;
     case (event.value == "/about"):
           post_id = 19; nav_id = 'about'; break;
     case (event.value == "/product"):
           post_id = 26; nav_id = 'product'; break;

    ...etc....

     default: post_id = 2; nav_id = 'home';
    }

    // content loader on back/next button
    $("#content-wrap").load("http://www.somesite.com/home/",{id:post_id}); // load content
 });   

 // content loader by #nav 
 $(document).on("click","#nav li a",function(e){                                         
   var post_id = $(this).attr("id"); // get page id   
   $("#content-wrap").load("http://www.somesite.com/home/",{id:post_id}); // load content  
   return false; // keep url, no refresh
 });

答案 1 :(得分:1)

这样的事情:

$(function () {
    var path = location.hash.substring(1); // remove '#'
    if (path) {
        $.address.value(path);
    }
});

<强>更新

如果您手动加载页面(例如在链接点击时)而不是使用地址事件处理程序(例如$.address.change(function () { ... })),则将$.address.value(path);上面的path替换为页面的Ajax调用{ {1}}:

$(function () {
    var path = location.hash.substring(1); // remove '#'
    if (path) {
        // get page at path
    }
});

答案 2 :(得分:1)

您可以通过添加以下内容将其设为Google(#!)的可编入索引:     $ .address.crawlable(真); 这是我发现有助于jQuery Address方法的链接: http://www.asual.com/jquery/address/docs/