成功和错误函数未在Ajax调用中触发

时间:2013-05-14 20:28:47

标签: asp.net-mvc asp.net-mvc-3 jquery

下面是一个Ajax调用我正在使用它来确定向用户显示哪些菜单选项(我知道这是一个有缺陷的方法,只是反对时间紧缩的演示)。当页面加载时,我可以在Visual Studio中逐步执行控制器方法,因此我知道它正在击中控制器并发回正确的信息。

查看Chrome的网络控制台我还可以看到浏览器收到了正确的响应。但是,console.logalert都没有被解雇。 successerror方法中的任何内容都不会执行。有谁看到出了什么问题?

查看

    $(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中网络和常规控制台的几个屏幕截图。麻烦来自于我逐步完成控制器方法并且程序已将值返回给浏览器。

网络控制台

enter image description here

标准控制台

enter image description here

2 个答案:

答案 0 :(得分:4)

中有一个额外的c

<强>成功的情况下:

因此响应是200请求,但因为您定义了no mapping for success,所以它永远不会被记录

答案 1 :(得分:4)

成功而不是成功

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()。always(function(a,textStatus,b){});

替换jQuery 1.8中不推荐使用的方法.complete()。  响应成功的事务,参数与.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){});

替换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()。失败(函数(jqXHR,textStatus,errorThrown){});

替换jQuery 1.8中不推荐使用的方法.error()。  这是上面完整回调函数的替代构造。有关实施细节,请参阅 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;
});

Check here for more details

Check here for the documentation details