Javascript AJAX在github源代码浏览中是如何实现的?
Github有一个非常好的源代码浏览器。在repo中的不同路径之间导航会生成ajax调用来加载内容(正如您在firebug日志中清楚看到的)。ajax调用返回要显示的新文件列表的html。除了更改文件的视图列表外,url也会更改。但是,它不像大多数ajax深度链接站点那样使用片段(使用#)。在github,整个url都发生了变化 例如,在django repo,转到Javascript AJAX在github源代码浏览中是如何实现的?,javascript,ajax,dom,github,deep-linking,Javascript,Ajax,Dom,Github,Deep Linking,Github有一个非常好的源代码浏览器。在repo中的不同路径之间导航会生成ajax调用来加载内容(正如您在firebug日志中清楚看到的)。ajax调用返回要显示的新文件列表的html。除了更改文件的视图列表外,url也会更改。但是,它不像大多数ajax深度链接站点那样使用片段(使用#)。在github,整个url都发生了变化 例如,在django repo,转到django文件夹将生成对https://github.com/django/django/tree/master/django?s
django
文件夹将生成对https://github.com/django/django/tree/master/django?slide=1&_=1327709883334
将返回文件夹的html内容。链接也将更改为。正如您所看到的,这个新链接没有使用片段
这是怎么做到的?我一直认为基于ajax的站点必须使用url片段(#)来实现深度链接,但显然不是这样 您必须使用更改浏览器历史记录
window.history.pushState(data, "Title", "/new-url");
医生说:
pushState()接受三个参数:状态对象、标题(即
当前已忽略),以及(可选)URL
最后一个参数是新的URL。出于安全原因,您只能更改URL的路径,而不能更改域本身。第二个参数是对新状态的描述。第一个参数是一些您可能希望与状态一起存储的数据。正如在的注释中所述,GitHub似乎不使用pAjax库。由于我最终回答了一个“不正确”的信息(事实上,我想我在回答这个问题时看到了一些与GitHub相关的东西,使用pAjax,但目前我找不到源代码),所以我选择了正确的答案 我没有发现开发人员关于是否使用了任何库的任何官方信息,只是发现一篇帖子说使用了History API: 然后我想到,为什么不问问代码本身呢 使用Chrome(实际上是任何带有体面开发工具的浏览器),打开一个存储库(在本例中是pAjax),右键单击任何目录,只需选择inspect元素 这将显示负责目录链接的
元素
出现了一个“可疑”类,让我们在页面的javascript源代码中搜索它
这里是目录链接的单击事件处理程序,以及与动画和历史Api相关的全部代码。可以注意到,它没有在历史Api后面使用任何库。别忘了标记“漂亮打印”选项
老生常谈
GitHub使用jQuery插件(pushState+Ajax),该插件使用HTML5历史API。awesome。pushstate api对我来说是纯粹的启示。thanxHmm,Joshua Peek发现Github树浏览器实际上没有使用pJax,正如Github上所看到的那样,插件中目前没有足够的功能来促进平滑过渡。现在还不清楚您是否对URL更改或整体UI体验感兴趣-URL更改与平滑AJAX过渡一起进行。我主要感兴趣的是他们如何在不重新加载整个内容的情况下更改URL。