Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 正斜杠的问题/&引用;在jqueryajax中_Javascript_Asp.net Mvc 3_Jquery - Fatal编程技术网

Javascript 正斜杠的问题/&引用;在jqueryajax中

Javascript 正斜杠的问题/&引用;在jqueryajax中,javascript,asp.net-mvc-3,jquery,Javascript,Asp.net Mvc 3,Jquery,我总是这样编写AJAX调用使用的URL:“/Home/Save”,开头带正斜杠。现在,最后一个项目正在部署到服务器上的虚拟目录中。因此,这些URL不再工作,因为它们不是指向“example.com/VirtualDir/Home/Save”,而是指向“example.com/Home/Save”,这是错误的。我很快解决了这个问题,删除了JavaScript中所有URL中的第一个正斜杠。所有的页面都很好,除了一个!当AJAX调用在有问题的页面上发生时,指定的URL将附加到页面URL。我昨天花了几个

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


编辑:在我的头敲击键盘几个小时后,我最终实现了以下内容。我在一个公共控制器中得到一个操作,它返回
Request.Url.GetLeftPart(UriPartial.Authority)
的结果,这是您的
http://www.mysite.com
。我在布局页面中将其呈现为一个全局JavaScript变量,
\u AppPath
。然后,每个AJAX调用都会得到如下URL:
\u AppPath+'/Controller/Action'
。这在任何地方都有效,我仍然不知道那页有什么问题。干杯

是否可以更改Ajax请求,使其指向“/VirtualDir/Home/Save”

如果它有助于您的代码,那么您可以使用
path
变量,以便在其他地方部署虚拟目录路径时可以轻松地更新(或删除)虚拟目录路径。或者,您的代码可以通过
window.location.href
属性读取其位置,并从中计算出结果

拥有相对于当前文档的路径(即没有/slash前缀)并没有多大用处,因为正如您所观察到的,当这些页面位于站点层次结构中的不同点时,一些页面将无法满足其请求。绝对URL将是要使用的URL(即带有/斜杠前缀)

[根据以下评论更新]

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

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

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


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

您可以更改Ajax请求,使其指向“/VirtualDir/Home/Save”吗

如果它有助于您的代码,那么您可以使用
path
变量,以便在其他地方部署虚拟目录路径时可以轻松地更新(或删除)虚拟目录路径。或者,您的代码可以通过
window.location.href
属性读取其位置,并从中计算出结果

拥有相对于当前文档的路径(即没有/slash前缀)并没有多大用处,因为正如您所观察到的,当这些页面位于站点层次结构中的不同点时,一些页面将无法满足其请求。绝对URL将是要使用的URL(即带有/斜杠前缀)

[根据以下评论更新]

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

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

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


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

感谢您的输入!我已经想到了这些和类似的解决方案,如果我不明白这一点,我肯定会选择其中一个。但是为了理智起见,我想知道为什么只有一个页面存在这个问题,而它与其他页面没有什么不同。这一个页面与其他页面在不同的文件夹中吗?当你在前面指定一个不带正斜杠的url时,它意味着“使用我当前所在的文件夹,并将此路径添加到其中”。@James-这不是真的