1

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

查看 Chrome 的网络控制台,我还可以看到浏览器收到了正确的响应。然而,theconsole.log或 thealert都没有开火。successorerror方法中也不执行任何操作。有谁看到出了什么问题?

看法

    $(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 中网络和常规控制台的几个屏幕截图。麻烦是在我单步执行控制器方法并且程序已将值返回给浏览器之后。

网络控制台

在此处输入图像描述

标准控制台

在此处输入图像描述

4

2 回答 2

4

成功而不是成功

尼尔

弃用通知:

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(函数(a, textStatus, b){});

替换 jQuery 1.8 中已弃用的方法 .complete()。为响应成功的交易,参数与 .done() 相同(即 a = 数据,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(函数(数据, 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().fail(函数(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;
});

在这里查看更多详情

在此处查看文档详细信息

于 2013-05-14T21:14:21.090 回答
4

你有一个额外c

成功:

所以响应是一个 200 request ,但是因为你已经no mapping for success定义了,所以它永远不会被记录

于 2013-05-14T20:32:56.013 回答