在window.location.hash中使用斜杠

时间:2012-06-27 11:48:49

标签: javascript jquery-mobile hash

如果我像这样更改哈希: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或其他调试应用程序并测试链接。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-4)

我打算在这里下注。我很确定在散列后使用斜杠是一个无效的URL,而firefox可能试图通过删除散列来补偿它是一个有效的URL。