所以,我正在做这样一个普通的ajax调用:
$.ajax({
type: "GET",
url: this.Controller + "/" + this.Action,
data: data,
cache: false,
dataType: "json",
success: function (data) {
var json = $.parseJSON(data);
$("#Debug").html(JSON.stringify(json, undefined, 4));
},
error: function (jqXHR, textStatus, errorThrown) {
var errorMessage = "Unable to retrieve data."
if (jqXHR.responseText != null) {
errorMessage += "\n\nError Message: " + jqXHR.responseText;
}
alert(errorMessage);
}
});
当我使用ajax url的相对路径时,只要当前页面的url中没有url变量,它就可以正常工作。它会正确转到http://domain.com/controller/action
如果有url变量,则ajax url会尝试点击http://domain.com/controller/controller/action
,但不存在。
如果我添加这样的斜杠:
url: "/" + this.Controller + "/" + this.Action
这解决了url变量导致的问题,但仅限于本地。当我部署到我们的服务器时,我的应用程序位于子目录中,因此网址为http://domain.com/myapp
。斜杠解决方案不起作用,因为根是http://domain.com
而不是http://domain.com/myapp
。
答案 0 :(得分:0)
你可以尝试这个$.ajax({url: document.domain + this.Controller ... })
。
答案 1 :(得分:0)
我通过JS尝试了各种方法来实现这一点,但它们都不适用于服务器(带子目录)和本地(不带)。
所以,我的解决方案是在我的web.config的appsettings中添加子目录的名称。在主web.config中,我有:<add key="Subdirectory" value="" />
在web.release.config中,我有:<add key="Subdirectory" value="SubDirectoryName" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
将其留在web.config中并将其设置为web.release.config中,子目录将仅在发布到服务器时进行转换和设置。
在_Layout.cshtml页面上,我有:
<script>
var subdirectory = '@ConfigurationManager.AppSettings["Subdirectory"]';
if (subdirectory != '') {
subdirectory = '/' + subdirectory;
}
</script>
然后,在我的JS的任何地方,我正在尝试进行ajax调用,我将url设置为:
url: subdirectory + "/" + this.Controller + "/" + this.Action, // subdirectory comes from _Layout.cshtml