History.js and url encoding



下面是我在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编码,因为这是不正确的。

面对这种情况,我是否缺少了一些需要做的事情?

如有任何帮助,我们将不胜感激。谢谢

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

我可能会进行旋转,然后将它们添加到我传递给发出ajax请求的函数的URL中(而不是传递.URL属性),但当History用于处理HTML4的哈希URL回退时,这听起来不是一个好主意。

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

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

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

更改后,我在代码中也遇到了一个问题,即使用$.praram()添加状态对象中的值,该对象是基于querystring中的值构建的。显然,"ng%26b"值已经编码,param正在对%进行编码,因此它最终为"ng%2526"。

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

感谢

最新更新