繁体   English   中英

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

[英]Problem with forward slash “/” in jQuery AJAX

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

编辑:在键盘上敲了几个小时后,我最终实现了以下内容。 I got an action in a common Controller that returns the result of Request.Url.GetLeftPart(UriPartial.Authority) , which is your http://www.mysite.com . 我将它在我的布局页面中呈现为全局 JavaScript 变量_AppPath 然后,每个 AJAX 调用都会得到它的 URL ,如下所示: _AppPath + '/Controller/Action' 这在任何地方都有效,但我仍然不知道该页面的问题是什么。 干杯!

您能否更改 Ajax 请求,使它们指向“/VirtualDir/Home/Save”?

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

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

[更新,基于以下评论]

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM