我正在php中创建一个web应用程序。我正在通过一个基于ajax的请求加载内容。当我点击一个超链接时,相应的页面会通过ajax获取,内容会被获取的页面替换。
现在的问题是,我需要一个物理href,这样我就可以实现类似facebook的功能,还可以维护浏览器历史记录属性。我不能对php页面进行老式的POSTBACK,因为我正在做一个过渡动画,其中当前页面滑动而新页面滑动。
有没有一种方法可以让我保留动画,并且仍然有一个有效的物理href和历史记录。
应用程序的设计是这样的:
- 该应用程序获取rss提要
- 它为那些rss提要创建DOM
- 点击任何标题后,页面都会显示出rss提要的全部内容
- 我需要在完整的故事页面上创建"点赞"按钮。但是我没有一个有效的网址
虽然Alexander的答案在客户端非常有效,但Facebook的linter工具不运行javascript,因此它将获得旧内容。这两个环节都没有提供解决方案。
amit需要实现的是url的服务器端解析。看见http://www.php.net/manual/en/function.parse-url.php.Fragment是服务器认为的散列标记值。在php代码中,根据片段为呈现正确的og:tag。
首先,如果你需要一个facebook的URL,那么就想一个能给你一个URL的结构,这样你的服务器端代码就会在得到该URL时加载正确的页面。这可能类似于http://yourdomain.com/page.php?feed=<feedname>&link=<linknumber>
,它允许您使用PHP $_GET
数组检查参数。如果您没有这些参数,则加载索引页;如果你这样做了,那么加载相关的文章。
其次,使用history.js之类的东西为HTML5pushState()
功能提供跨浏览器支持,这样您就可以在进行AJAX调用时设置页面URL,而无需浏览器进行完全重新加载。
您必须实现哈希导航。
这是一个简短的教程。
以下是更多的概念介绍。
如果您使用jQuery,我可以推荐BBQ进行哈希导航:
http://benalman.com/projects/jquery-bbq-plugin/
这听起来很直接。您像往常一样拥有url,使用hash(#)可以在客户端和服务器端提取信息。
只有一件事是缺失的,在你返回内容之前,在服务器端,检查用户代理字符串并将其与facebook机器人进行比较(如果我没有错的话,这是一个类似于"facebookexternalhit"的东西),如果它是facebook机器人,那么返回你想要的,描述like/share(开放图元数据)的url,如果是任何其他用户代理字符串,则照常返回内容。