3

我在 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() 函数返回的对象。它有一个“数据”对象属性,其中包含正确编码的参数。

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

4

1 回答 1

1

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

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

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

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

无论如何,希望这可能对将来的某人有所帮助。

谢谢

于 2012-10-04T19:55:31.020 回答