Функции Success и Error не срабатывают при вызове Ajax

Ниже приведен Ajax-вызов, который я использую, чтобы определить, какие пункты меню показывать пользователям (я знаю, что это некорректный метод, просто по сравнению с временным сокращением для демонстрации). Когда страница загружается, я могу пройти через метод контроллера в Visual Studio, чтобы я знал, что он попадает в контроллер и отправляет обратно нужную информацию.

Глядя на сетевую консоль Chrome, я также вижу, что браузер получил правильный ответ. Тем не менее, ни console.log или alert стреляют. Ничего в success или же error методы выполняются либо. Кто-нибудь видит, что идет не так?

Посмотреть

    $(document).ready(function ($) {
        //Determine which links to show in navbar
        window.onload = function () {
            $.ajax({
                type: 'GET',
                url: '@Url.Action("CheckSecurity","Home")',
                dataType: 'json',
                succcess: function (data) {
                    console.log(data);
                    alert(data);
                    if (data == "admin") { $('#adminLink').show(); }
                    else if (data == "IT") { $('#ITLink').show(); }
                    else if (data == "viewer") { $('#viewerLink').show(); }
                    else if (data == "modifier") { $('#modifierLink').show(); }
                },
                error: function (data) {
                    alert("error");
                }
            });
        };

контроллер

    [HttpGet]
    public JsonResult CheckSecurity()
    {
        if (Security.IsAdmin(User)) return Json("admin", JsonRequestBehavior.AllowGet);
        if (Security.IsItSupport(User)) return Json("IT", JsonRequestBehavior.AllowGet);
        if (Security.IsViewer(User)) return Json("viewer", JsonRequestBehavior.AllowGet);
        if (Security.IsModifier(User)) return Json("modifier", JsonRequestBehavior.AllowGet);

        return Json("NA", JsonRequestBehavior.AllowGet);
    }

Вот пара снимков экрана Сети и обычной консоли в Chrome. Беспокойство происходит после того, как я прошел через метод контроллера, и программа вернула значение обратно в браузер.

Консоль сети

введите описание изображения здесь

Стандартная консоль

введите описание изображения здесь

2 ответа

Решение

Есть дополнительный c в вашем

успешное выполнение :

Таким образом, ответ является запросом 200, но потому что у вас есть no mapping for success определено, это просто никогда не регистрируется

Это успех, а не успех

NealR

Уведомление об устаревании:

Обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() будут устаревшими в jQuery 1.8. Чтобы подготовить ваш код для их возможного удаления, используйте взамен jqXHR.done(), jqXHR.fail() и jqXHR.always().

Проверьте готово, сбой и всегда обратные вызовы ниже.

$.ajax({
    url: 'Your Url',
    data: JSON.stringify(Parameter list),
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json',
    beforeSend: function (xhr, opts) {
    }
}).done(function (data) {
    debugger;
}).fail(function (data) {
    debugger;
}).always(function(data) { 
    alert("complete"); 
});

.ajax (). всегда (function(a, textStatus, b){});

Заменяет метод.complete (), который устарел в jQuery 1.8. В ответ на успешную транзакцию аргументы такие же, как.done () (т. Е. A = data, b = jqXHR), а для неудачных транзакций аргументы такие же, как.fail () (т. Е. A = jqXHR, b = errorThrown). Это альтернативная конструкция для полной функции обратного вызова выше. Обратитесь к deferred.always() для деталей реализации.

$.ajax({
    url: 'Your Url',
    data: JSON.stringify(Parameter list),
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json',
    beforeSend: function (xhr, opts) {
    }
}).always(function(data) { 
    alert("complete"); 
});

.ajax (). done (function (data, textStatus, jqXHR) {});

Заменяет метод.success (), который устарел в jQuery 1.8. Это альтернативная конструкция для функции обратного вызова success выше. Обратитесь к deferred.done () для деталей реализации.

$.ajax({
    url: 'Your Url',
    data: JSON.stringify(Parameter list),
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json',
    beforeSend: function (xhr, opts) {
    }
}).done(function (data) {
    debugger;
});

.ajax (). fail (функция (jqXHR, textStatus, errorThrown){});

Заменяет метод.error (), который устарел в jQuery 1.8. Это альтернативная конструкция для полной функции обратного вызова выше. Обратитесь к deferred.fail () для деталей реализации.

$.ajax({
    url: 'Your Url',
    data: JSON.stringify(Parameter list),
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json',
    beforeSend: function (xhr, opts) {
    }
}).fail(function (data) {
    debugger;
});

Проверьте здесь для более подробной информации

Проверьте здесь для деталей документации

Другие вопросы по тегам