jQuery AJAX中正斜杠“/”的问题

时间:2011-05-26 15:49:56

标签: javascript asp.net-mvc-3 jquery

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

编辑:在键盘上敲了几个小时之后,我最终执行了以下操作。我在一个公共控制器中得到一个动作,它返回Request.Url.GetLeftPart(UriPartial.Authority)的结果,这是你的http://www.mysite.com。我在Layout页面中将其呈现为全局JavaScript变量_AppPath。然后,每个AJAX调用获取其URL:_AppPath + '/Controller/Action'。这适用于所有地方,我仍然不知道该页面的问题是什么黑客。干杯!

1 个答案:

答案 0 :(得分:1)

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

如果它对您的代码有帮助,您可以拥有path变量,以便在将其部署到其他位置时可以轻松更新虚拟目录路径(或将其删除)。或者您的代码可以通过window.location.href属性读取其位置,并从那里解决问题。

拥有相对于当前文档的路径(即没有/ slash前缀)并没有那么有用,因为正如您所观察到的那样,当这些页面处于不同的点时,某些页面将失败。网站层次结构绝对URL将是一个(即使用/斜杠前缀)。

[更新,基于以下评论]

@Dimskiy,服务器端框架是.NET MVC或者服务器上没有这些URL的实际文件夹并不重要。浏览器只会根据它看到的URL结构进行响应。

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

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

对“绝对”路径的请求,例如“/ Home / Save”(注意/斜杠前缀)将始终转到域的根,例如, example.com/Home/Save。但由于您需要转到“VirtualDir”虚拟目录,因此您的URL将变为“/ VirtualDir / Home / Save”。