2016-03-16 5 views
1

Таким образом, я делаю обычный 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.

ответ

0

вы можете попробовать $.ajax({url: document.domain + this.Controller ... }).

+0

Решение должно работать как локально, так и на сервере. Таким образом, при локальном тестировании document.domain возвращает localhost. Когда вы делаете это так, как вы это делаете, он пытается попасть в URL-адрес http: // localhost: #####/localhostcontroller/action'. – ScubaSteve

0

Я пробовал всевозможные способы сделать это через JS, и ни один из них не работал как на сервере (с подкаталогом), так и на локальном (без).

Итак, решение должно было добавить название подкаталога в настройках приложения web.config. В главном 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

 Смежные вопросы

  • Нет связанных вопросов^_^