Функция успеха AJAX на сервере - PullRequest
5 голосов
/ 25 октября 2011

Это работает на моем компьютере разработчика, но не на рабочем сервере. Я пытаюсь обновить некоторые div с помощью ajax, но они не обновляются, хотя другие части работают нормально. Я использую IIS 6 на сервере. Когда я отлаживаю этот код на стороне сервера с помощью firebug, он не попадает на точки останова, которые я добавляю в функцию успеха.

Сценарий:

function updateServiceInfo(nodeId) {
        var id = { id: nodeId };
        $.ajax({
            url: '/ServiceInfo/ServiceInfoPartial',
            type: 'GET',
            data: id,
            dataType: 'html',
            success: function (data) {
                $('#serviceInfoContent').html(data);
            },
    error: function (request, error) {

    }
        });
    }

Контроллер:

 public class ServiceInfoController : Controller
    {
        public ActionResult ServiceInfo()
        {
            return PartialView("ServiceInfo");
        }

        public ActionResult ServiceInfoPartial(string id)
        {
            return PartialView("ServiceInfoPartial");
        }
    }

Просмотров: 1009 * *

serviceinfopartial

@model string
<p>
    Немає опису</p>

serviceinfo

<div id="serviceInfo">
    <div id="ContainerPanel" class="ContainerPanel">
        <div id="serviceInfoHeader" class="collapsePanelHeader">
            <div id="dvHeaderText" class="HeaderContent">
                Опис сервісу</div>
            <div id="dvArrow" class="ArrowClose">
            </div>
        </div>
        <div id="serviceInfoContent" class="serviceInfoContent">

        </div>
    </div>
</div>

Ответ, который возвращается в консоли:

GET http://localhost/Managers/GetManagers?nodeId=563344 404 Not Found 42ms

Ответы [ 2 ]

12 голосов
/ 25 октября 2011

Ахххххххххххххх, другой жестко запрограммированный URL:

url: '/ServiceInfo/ServiceInfoPartial',

Никогда URL-адреса с жестким кодом, подобные этому, в приложении ASP.NET MVC.

Всегда используйте URL-помощники для их генерации:

url: '@Url.Action("ServiceInfoPartial", "ServiceInfo")',

или если это в отдельном файле javascript, где вы не можете использовать помощники url, просто используйте атрибуты данных data5 * HTML5 для некоторого элемента DOM:

<div id="serviceInfo" data-url="@Url.Action("ServiceInfoPartial", "ServiceInfo")">
...
</div>

а затем в вашем javascript просто:

url: $('#serviceInfo').data('url'),

Причина, по которой ваш код не работает, когда вы размещаете его в IIS, заключается в том, что в IIS вы, вероятно, размещаете свое приложение в виртуальном каталоге, поэтому правильный URL-адрес больше не /ServiceInfo/ServiceInfoPartial, а /YourAppName/ServiceInfo/ServiceInfoPartial. Вот почему вы никогда не должны жестко кодировать любые URL-адреса и использовать помощники для их генерации =>, потому что помощники обрабатывают эти случаи. Еще одно преимущество использования помощников заключается в том, что если вы позже решите изменить расположение ваших маршрутов в Global.asax, вам не нужно будет изменять все ваши файлы javascript и т. Д. ... Управление URL-адресами централизовано в одном месте.

0 голосов
/ 05 января 2018

Это сработало для меня, но только проверено в Chrome 53:

Создайте несколько глобальных переменных области действия в своем файле .cshtml, просто помните о проблемах области действия и присвойте своим переменным уникальные имена.

<script>
    globalUrl = '@Url.Action("ServiceInfoPartial", "ServiceInfo")';
</script>

Затем укажите ваш файл js ...

<script type="text/javascript" src="yourJsFile.js"></script>

Внутри вашего yourJsFile.js:

url: globalUrl,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...