【问题标题】:Linkable navigation with AJAX?使用 AJAX 的可链接导航?
【发布时间】:2014-11-22 01:38:21
【问题描述】:

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

【问题讨论】:

  • 首先实现一个“正确”的页面结构,它可以在没有 AJAX 的情况下工作 - 然后只将 AJAX 放在“顶部”。搜索引擎也会更喜欢这样。 HTML5 History API 有助于更改地址栏中可见的 URL。

标签: javascript html ajax hyperlink navigation


【解决方案1】:

通常您会使用两种方法中的一种。取决于您需要支持的浏览器集:

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

window.location.hash = 'bla-bla';

当您的页面加载时,您会解析哈希部分并执行必要的逻辑:

if (window.location.hash === 'about-page') {
    // ...
}

另一种方法是使用“History API”——在现代浏览器中,您可以使用名为“History API”的 API,它允许您更改浏览器的历史记录,包括 URL。您在 history 对象上使用名为 pushState 的方法,例如:

window.history.pushState({ event: 'event-id' }, "Event Title", "?event=event-id");

更多详情,您可以查看我之前发布的一个回答: How to manage browser "back" and "forward" buttons when creating a javascript widget

【讨论】:

  • 谢谢,我会调查的。似乎历史 API 更灵活,因为您还可以与用户向后/向前工作,但代价是不在旧版浏览器上工作?
【解决方案2】:

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

但是否有标准方法很难说清楚。我已经看到战略性地使用了 Put 请求。这会使 url 发生变化,但这是您避免的完整提交。

一些 javascript 库允许您自己修改 url。我不记得我们使用了哪些。

在任何一种情况下,您的应用都需要满足这种深度导航,因为您让用户能够直接移动到他们以前可能无法访问的页面

【讨论】:

  • YUI 库是我过去用来从网页编辑浏览器 url 的库。不过,已经有一段时间了。那里可能有更好的工具
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多