如果我像这样更改哈希: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,这会在控制台中产生静默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或其他调试应用程序并测试链接。
答案 0 :(得分:3)
使用History.js时遇到了类似的问题。我认为这是该脚本的预期行为,因为它旨在使URL非常漂亮(非无效),同时也不会重新加载页面。
答案 1 :(得分:-4)
我打算在这里下注。我很确定在散列后使用斜杠是一个无效的URL,而firefox可能试图通过删除散列来补偿它是一个有效的URL。