【问题标题】:History.js and url encodingHistory.js 和 url 编码
【发布时间】:2012-09-21 11:40:33
【问题描述】:

下面是我在 Firefox v15.0.1 中的本地站点上请求的 URI 示例,为简洁起见,我删除了主机名。

/search?cat=ngb%26b

一些分页链接显示在结果页面上,带有类似这样的href

?p=2&cat=ngb%26b

对他们的点击事件执行以下历史请求,该事件使用https://github.com/browserstate/History.js/,它使用 HTML5 历史记录,因为它的状态发生了我所知道的变化。

History.getState().url;

url History.getState().url 给了我下面的信息,这被传递给点击事件的异步函数:

/search?cat=ngb&b&p=2

然后历史记录将浏览器 URI 调整为此

/search?cat=ngb&b=undefined&p=2

我的异步操作失败了,因为“cat”参数现在不正确。

我不能对 getState().url 的整个结果进行 URL 编码,因为那是不正确的。

在面对这种情况时,我有什么遗漏需要做的吗?

任何帮助将不胜感激。谢谢。

更新: 我目前正在调试它并查看 getState() 函数返回的对象。它有一个“数据”对象属性,其中包含正确编码的参数。

可能我可以旋转然后将它们添加到我传递给发出 ajax 请求的函数的 URL(而不是传递给它的 .url 属性),但这听起来不是一个好主意,当历史意味着处理 HTML4 的哈希 url 回退。

【问题讨论】:

    标签: javascript html history.js html5-history


    【解决方案1】:

    在这里回答我自己的问题。

    我在这里遇到了两个问题,一个是 History.js,另一个是在不正确的情况下使用 JQuery.param,因为它会对您提供的任何内容进行编码以使其对 URL 使用有效。

    为了解决 History.js 插件的一些问题,我发现了这个有用的分支 https://github.com/hrunting/history.js/tree/encoded-uris 这仍然是一个开放的拉取请求,但它帮助了我很多 不幸的是,它确实需要重新捆绑更改的文件并在需要时将它们缩小。

    更改后,我在代码中也遇到了问题,即使用 $.param() 将值添加到基于查询字符串中的值构建的状态对象中。显然,“ng%26b”值已经被编码,param 正在对 % 进行编码,所以它最终成为“ng%2526”。

    希望这对将来的某人有所帮助。

    谢谢

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 1970-01-01
      • 2012-10-02
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多