Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX在github源代码浏览中是如何实现的?_Javascript_Ajax_Dom_Github_Deep Linking - Fatal编程技术网

Javascript AJAX在github源代码浏览中是如何实现的?

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

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

例如,在django repo,转到
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。