2011-05-26 166 views
1

我总是用这种方式编写由AJAX调用使用的URL:"/Home/Save",其中以正斜杠开头。现在这个最后的项目被部署到服务器上的虚拟目录。因此,这些网址不再有效,因为它们不是"example.com/VirtualDir/Home/Save",而是指向"example.com/Home/Save"这是错误的。我通过在我的JavaScript中的所有URL中删除第一个正斜杠"/"来快速修复此问题。所有页面都很好,除了一个!当AJAX调用发生在有问题的页面上时,指定的URL会被追加到页面URL。我昨天和今天整个上午都花了几个小时,但我无法弄清楚。这个页面与其他页面完全没有什么不同。有没有人有过这个问题?我应该发布我的代码吗?jQuery中正斜杠“/”的问题AJAX

编辑︰我的头在键盘上敲了几个小时后,我结束了以下实施。我在一个共同的控制器中得到了一个动作,返回Request.Url.GetLeftPart(UriPartial.Authority)的结果,这是您的http://www.mysite.com。我将它在我的Layout页面中渲染成一个全局JavaScript变量,_AppPath。然后,每个AJAX调用都会得到如下的URL:_AppPath + '/Controller/Action'。这在任何地方都行得通,我仍然不知道那个黑客是什么问题。干杯!

+0

这一页有一个非常不同的网址吗?除了这个问题之外,是什么使这一个页面不同? – NickAldwin 2011-05-26 16:09:08

+0

@NickAldwin - 绝对没有。它是.NET MVC。我拥有的所有页面都是其中包含1 - 3个部分视图的视图。网址都像'localhost:2244/Home/Display',JavaScript在每个视图上都以完全相同的方式写入剃须刀部分。总是有一个$(document).ready()从JS文件调用Init函数,该文件设置触发AJAX调用的点击处理程序。无处不在。 – Dimskiy 2011-05-26 16:23:28

回答

1

您可以更改Ajax请求,以便它们改为指向“/ VirtualDir/Home/Save”吗?

如果它可以帮助你的代码,你可以有一个path变量,这样当你将它部署到其他地方时,你可以轻松地更新虚拟目录路径(或删除它)。或者你的代码可以通过window.location.href属性读取它的位置,并从那里得出结果。

相对于当前文档(即没有/斜线前缀)的路径没有那么有用,因为正如你所观察的那样,当这些页面处于不同的点时,有些页面会失败它们的请求网站层次结构。一个绝对的URL将是一个去的(即用/斜线前缀)。

[更新内容的基础上,下面的评论]

@Dimskiy,它没有那么多的事情,服务器端框架是.NET MVC,或者说有针对服务器上的这些网址没有实际的文件夹。浏览器将根据它所看到的URL结构进行响应。

因此,要查找的内容是浏览器地址栏中不同页面的URL,以及向服务器发出的Ajax请求的URL(例如,在Firebug的“Net”面板中查找这些URL)。比较这些网址,查看每个网址所建议的文件夹数量。

如果服务器上没有实际的文件夹,则无关紧要。浏览器无法分辨,它只能查看URL结构。如果JavaScript在“Home/Save”中从名为“foo”的页面调用Ajax资源,则该请求将被路由到“foo/Home/Save”。如果请求是从页面“foo/bar”发出的,那么它将被路由到“foo/bar/Home/Save”。这是一个相对路径 - 它与包含的HTML文档相关。

对“绝对”路径的请求,比如说“/ Home/Save”(注意/斜线前缀)总是会到达域的根目录,例如, example.com/Home/Save。但是由于您需要访问“VirtualDir”虚拟目录,您的URL将变为“/ VirtualDir/Home/Save”。

+0

感谢您的输入!我想到了这些和类似的解决方案,如果我不知道这一点,我肯定会与其中一个。但为了理智,我想知道为什么它是1页有这个问题,当它没有任何其他页面不同。 – Dimskiy 2011-05-26 16:07:10

+0

这是一个页面与其余的文件夹不同吗?当你在前面指定一个没有正斜杠的网址时,它意味着“使用我目前所在的文件夹,并将此路径添加到它”。 – James 2011-05-26 16:41:31

+0

@詹姆斯 - 这不是一个真正的文件夹。这是.NET MVC,所以我得到了控制器和操作。产生页面的动作和处理AJAX调用的动作位于同一个控制器中。例如:'Home/Display'是页面,'Home/Save'是AJAX处理程序。简单地说,它是一个控制器类Home,它有两个功能,Display和Save,其中Display生成页面HTML,Save处理AJAX请求。 – Dimskiy 2011-05-26 16:58:15