github源码浏览中AJAX是如何完成的?

2024-02-19

Github 有一个非常好的源代码浏览器。在存储库中的不同路径之间导航会生成 ajax 调用来加载内容(正如您可以在 firebug 日志中清楚地看到的那样)。 ajax 调用返回要显示的新文件列表的 html。除了更改文件的查看列表之外,URL 也会更改。然而,它不像大多数 ajax 深层链接站点那样使用片段(使用 #)。在 github 上,整个 url 发生了变化。

例如在 django repo 中https://github.com/django/django https://github.com/django/django即将django文件夹将生成ajax请求https://github.com/django/django/tree/master/django?slide=1&_=1327709883334这将返回文件夹的 html 内容。该链接也将更改为https://github.com/django/django/tree/master/django https://github.com/django/django/tree/master/django。正如您所看到的,这个新链接不使用片段。

这是怎么做到的?我一直认为基于 ajax 的网站必须使用 url 片段 (#) 来实现深度链接,但显然事实并非如此。


你必须使用HTML5的pushState()方法 https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState%28%29.C2.A0method更改浏览器历史记录。

window.history.pushState(data, "Title", "/new-url");

医生说:

PushState() 接受三个参数:一个状态对象、一个标题(即 目前被忽略)和(可选)URL。

最后一个参数是新的 URL。出于安全原因,您只能更改 URL 的路径,而不能更改域本身。第二个参数是对新状态的描述。第一个参数是您可能想要与状态一起存储的一些数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

github源码浏览中AJAX是如何完成的? 的相关文章

随机推荐