我遇到了使用'hashbang'来跟踪通过AJAX加载了哪个页面的问题。
当单击链接时,会通过AJAX请求将内容加载到内容div中,URL的哈希值将更改为页面名称。例如,如果用户直接访问pageA( http://www.domain.com/pageA ),然后点击pageB的链接,则该网址将更改为 http://www.domain.com/pageA#/pageB < / p>
我正在为我的应用程序使用CodeIgniter,处理哈希更改的代码在我的标题视图中,它执行以下操作:
<script type="text/javascript">
window.redirect = function() {
if(window.location.hash.substring(0, 2) == "#!") {
if(window.location.hash.substring(2).length > 2) {
window.location = window.location.hash.substring(2);
} else {
return false;
}
}
return false;
}
window.redirect();
</script>
<script type="text/javascript">
$(function() {
$(window).hashchange(function() {
if(ajax_loading == true) {
return false;
} else {
loadPage(window.location.hash.substring(2), 'internal', '');
}
});
});
</script>
这有两个步骤。第一个检查是否通过刷新或输入URL直接访问页面时是否存在hashbang。如果有hashbang,则重定向到存储在哈希中的页面。
第二步检查哈希的更改,例如,按下后退按钮的用户喜欢这样做。
我的问题在于第一个块 - 当用户刷新或直接输入带有hashbang的URL时。
如果用户输入 http://www.domain.com/pageA#/pageB , pageA 上的任何服务器端代码都将在窗口重定向之前运行 pageB < / p>
这会导致以下情况出现问题:
由于在CodeIgniter控制器中加载了代码最后一点的视图 - 除了执行hashbang之前的页面代码之外,我不能在任何时候进行窗口重定向。
是否有任何关于如何防止这种情况发生的想法?
答案 0 :(得分:0)
只是不要将用户发送到http://www.domain.com/pageA#/pageC。
您应该有一个唯一的页面,它不会设置任何会话变量,并通过AJAX加载其他页面。然后,用户永远不会直接转到pageA ,而是通过http://www.domain.com/index#/pageA。
正如我假设您为自己提供了指向用户的链接,设置它应该没有问题。