Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重定向到URI的哈希版本的最佳方法?_Javascript_Asp.net Mvc_Web Applications - Fatal编程技术网

Javascript 重定向到URI的哈希版本的最佳方法?

Javascript 重定向到URI的哈希版本的最佳方法?,javascript,asp.net-mvc,web-applications,Javascript,Asp.net Mvc,Web Applications,因此,我的web应用程序上的所有页面都有类似的URI。但当然,如果用户访问,他们应该得到重定向,并在其通常的荣耀体验网站 好的,没问题,对吗?只需编写某种全局HTTP请求拦截器,自动将任何内容重定向到其哈希版本 但这并不是很有效,因为访问的想法是“框架”页面(即)然后Ajax加载到其内部框架中。因此,当这种Ajax发生时,上面提到的简单解决方案会运行到无限循环中,因为至少应该允许Ajax请求获得未删除的版本 现在我有一个不满意的解决方案,我的所有“子页面”都包括 除了代码重复(通过使用脚本组合框

因此,我的web应用程序上的所有页面都有类似的URI。但当然,如果用户访问,他们应该得到重定向,并在其通常的荣耀体验网站

好的,没问题,对吗?只需编写某种全局HTTP请求拦截器,自动将任何内容重定向到其哈希版本

但这并不是很有效,因为访问的想法是“框架”页面(即)然后Ajax加载到其内部框架中。因此,当这种Ajax发生时,上面提到的简单解决方案会运行到无限循环中,因为至少应该允许Ajax请求获得未删除的版本

现在我有一个不满意的解决方案,我的所有“子页面”都包括

除了代码重复(通过使用脚本组合框架在某种程度上减轻了代码重复)之外,最大的问题是,当用户访问时,页面的丑陋的未设置样式、未编写脚本的版本需要一两秒钟才能加载,只有到那时JavaScript重定向才会触发。没意思


所以我在寻找更好的解决方案。服务器端我们正在开发ASP.NETMVC2,但这有点不可知。可能是这样的,在使用Ajax时,在请求中附加“?framed=true”,然后在指向查询字符串中没有framed=true的非根路径时执行服务器端重定向?我对你如何解决这个问题很感兴趣。

< P>你可能想考虑一个服务器端URL重写解决方案。这是否合适取决于您对站点和基础设施的更多了解,但在一般情况下,mod#u rewrite(或您选择的服务器上的等效模块)可以非常干净地处理您所描述的“somehash”与“somehash”变体

(手册)
(示例)

这是否解决了我第三段中的问题?因为据我所知,这是我在第二段中概述的幼稚解决方案之一,并立即解释了为什么它不起作用。我认为它会起作用。我基本上会以一种类似于你在上一段中描述的方式来解决它。(很抱歉,在我第一次阅读时,我错过了其中的服务器端评论。)让你的应用程序生成服务器可以适当重定向的Ajax URL。也许一个更基本的问题是你是否真的需要这个somehash/#somehash关系?您是否被一些需要保留的URL卡住了,因为它们需要等价性?如果没有,那么我将重新构造内容,以便用户永远看不到内部框架URL。
if (window.location.pathname != "/")
{
    window.location.href = window.location.protocol + "//" + window.location.host + "/#" + window.location.pathname.substring(1);
}