Таким образом, я делаю обычный Ajax вызов, как это:Почему переменные URL-адреса вызывают проблемы с относительным URL-адресом 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, то URL-адрес ajax пытается ударить http://domain.com/controller/controller/action
, которого не существует.
Если добавить косую черту так:
url: "/" + this.Controller + "/" + this.Action
Это устраняет проблему, что переменные URL вызывают, но только локально. Когда я развертываю на наших серверах, мое приложение находится в подкаталоге, поэтому URL-адрес - http://domain.com/myapp
. Слэш-решение не работает, так как корень http://domain.com
, а не http://domain.com/myapp
.
Решение должно работать как локально, так и на сервере. Таким образом, при локальном тестировании document.domain возвращает localhost. Когда вы делаете это так, как вы это делаете, он пытается попасть в URL-адрес http: // localhost: #####/localhostcontroller/action'. – ScubaSteve