【问题标题】:Hash tag, query string, and Ajaxified search results [closed]哈希标签、查询字符串和 Ajaxified 搜索结果 [关闭]
【发布时间】:2012-10-16 15:43:48
【问题描述】:

我有一个搜索表单,只要表单中的某些内容发生变化,它就会自动向我的 Web 应用程序发送 POST 数据。 Web 应用程序(用 PHP/CodeIgniter 编写)接受 POST 或 GET 并返回正确的结果并将其显示在页面上。一切正常。

现在,我担心的是 URL 没有反映获取当前搜索结果所需的查询参数。因此,如果有人复制并分享了地址,点击该 URL 的人将看不到预期的数据。书签等也有同样的问题。

可以在 jQuery 中更新查询字符串,但这会强制浏览器重定向到新的 URL(这样做时,页面会显示正确的搜索结果,因为 Web 应用程序实际上最初是为非 JS 工作而编写的)。这种重定向意味着 Ajaxifying 的努力被浪费了。

似乎哈希 # 可用于更新地址而不使浏览器重定向,但我似乎无法在非 JS 情况下使用该信息(我无法通过 GET 访问该信息)。

我应该使用什么方法来解决这个问题?

【问题讨论】:

标签: javascript ajax codeigniter codeigniter-2


【解决方案1】:

HTML5浏览器支持History pushState,可以在不刷新页面的情况下更新浏览器的url。

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

您可以使用history.js添加对不支持它的浏览器的支持

【讨论】:

  • 非 HTML5 浏览器会发生什么?
  • @StackOverflowNewbie — 让他们回退到非 Ajax 版本。
  • @StackOverflowNewbie 您可以使用当前搜索向您的页面添加一个链接,并告诉您的访问者复制该链接而不是栏中的网址
  • history.js 使用哈希更改 URL,对吗?或者如果它可以更改查询字符串,它会重定向吗?
  • 一年后没有人会使用history.js。现在使用它只是意味着在一年内重新编写。按照@Quentin 的建议,让非pushState 浏览器回退到非Ajax 版本。
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多