Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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的可链接导航?_Javascript_Html_Ajax_Hyperlink_Navigation - Fatal编程技术网

Javascript 使用AJAX的可链接导航?

Javascript 使用AJAX的可链接导航?,javascript,html,ajax,hyperlink,navigation,Javascript,Html,Ajax,Hyperlink,Navigation,刚进入web编程,当涉及到导航时,到目前为止,我更喜欢在单击菜单链接时使用Javascript和AJAX请求来更改内容。它很快,没有页面刷新,非常棒。唯一的问题是网站的URL总是保持不变。例如,我无法将某人链接到“关于”页面。解决这个问题的标准方法是什么? 我目前只使用HTML、JavaScript和jQuery。这取决于您使用的框架。这一直是对JSF的经典批评,JSF使用Put请求作为其通信方法的一部分具有相同的效果。他们在以后的版本中做了一些修改 但是否有一个标准的方法很难说清楚。我见过策略

刚进入web编程,当涉及到导航时,到目前为止,我更喜欢在单击菜单链接时使用Javascript和AJAX请求来更改内容。它很快,没有页面刷新,非常棒。唯一的问题是网站的URL总是保持不变。例如,我无法将某人链接到“关于”页面。解决这个问题的标准方法是什么?
我目前只使用HTML、JavaScript和jQuery。

这取决于您使用的框架。这一直是对JSF的经典批评,JSF使用Put请求作为其通信方法的一部分具有相同的效果。他们在以后的版本中做了一些修改

但是否有一个标准的方法很难说清楚。我见过策略性地使用Put请求。这会改变url,但这是您避免的完整提交

一些javascript库允许您自己修改url。我记不起我们用过哪些


在这两种情况下,你的应用程序都需要适应这种深度导航,因为你让用户能够直接移动到他们以前可能无法移动的页面。通常,你会使用两种方法之一。根据您需要支持的浏览器集:

更改哈希-您可以更改url的哈希部分(
http://.../index.html#about-页面
),无需重新加载页面。因此,例如,当您单击“关于”链接时,可以使用类似以下内容设置URL的哈希:

window.location.hash = 'bla-bla';
加载页面时,解析哈希部分并执行必要的逻辑:

if (window.location.hash === 'about-page') {
    // ...
}
另一种方法是使用“历史API”-在现代浏览器中,您可以使用名为“历史API”的API,该API允许您更改浏览器的历史,包括URL。在
历史
对象上使用名为
pushState
的方法,例如:

window.history.pushState({ event: 'event-id' }, "Event Title", "?event=event-id");
有关更多详细信息,您可以查看我以前发布的答案:

首先实现一个“适当”的页面结构,该结构可以在没有AJAX的情况下工作,然后只将AJAX放在“最上面”。搜索引擎也会更喜欢这样。HTML5历史API有助于更改地址栏中可见的URL。YUI库是我过去用来从网页编辑浏览器URL的库。不过已经有一段时间了。那里可能有更好的工具谢谢,我会调查的。历史API似乎更灵活,因为您也可以与用户一起向前/向后工作,但代价是不在较旧的浏览器上工作?