6

如果我像这样更改哈希:window.location.hash = "main/0/sub/1/na/false";. 浏览器中的地址更改为http://mysite.com/#main/0/sub/1/na/false。Page 的 onhashchange 函数触发,一切正常。

但是,在 Firebug 中,我可以看到我也在发送一个请求到:http://mysite.com/main/0/sub/1/na/false... URL without hash,这导致控制台中出现静默 404。

当我调试时,我发现它发生在这window.location.hash一点上。

但是,如果我像这样更改哈希:window.location.hash = "main=0&sub=1&na=false";不会发送额外的请求。

为什么在第一个示例中发送附加请求?

更新: 我注意到它window.location.hash在(期间?)之后和之前发送请求$(window).bind('hashchange')。例如,如果我有...

window.location.hash = 'main/0/sub/1/na/false'; // Breakpoint 1 in Firebug

$(window).bind('hashchange', function(e) {
    e.preventDefault();   // Breakpoint 2 in Firebug
    e.stopPropagation();
});

当它在断点 1 处停止时,不会发送任何请求。当它在断点 2 处停止时,请求已经发送。

我可以在 Apache Tomcat 中看到请求也正在发送。

我要补充一点,我已经插入了 jQuery 和 jQuery Mobile。

更新 2: 删除 jQuery Mobile 解决了这个问题。但是,我需要它:/

更新 3

如果有人感兴趣:使用 jQuery Mobile:http: //jsfiddle.net/pioSko/hz5PU/3/

没有 jQuery Mobile:http: //jsfiddle.net/pioSko/hz5PU/4/

打开 Firebug 或其他调试应用程序并测试链接。

4

2 回答 2

3

我在使用History.js时遇到了类似的问题。我认为这是该脚本的预期行为,因为它旨在使 URL 漂亮(非散列),同时也不重新加载页面。

于 2012-12-22T09:05:13.947 回答
-4

我在这里赌一把。我很确定在散列后使用斜杠是无效的 URL,而 Firefox 可能正试图通过删除散列来弥补这一点,使之成为有效的 URL。

于 2012-06-27T11:52:52.233 回答