$ .when(ajaxCall)与成功

时间:2014-08-06 12:56:17

标签: javascript jquery ajax

我的asp.net MVC视图中有以下代码: -

$('body').on("click", "#transferserver,#transfersd,#transferfirewall,#transferrouter,#transferswitch", function () {

        $("#showoptions").dialog({
            title: "Assign Selected Records To New Rack",
            width: 'auto', // overcomes width:'auto' and maxWidth bug
            maxWidth: 600,
            height: 'auto',
            modal: true,
            fluid: true, //new option
            resizable: false
        });

        var ajaxCall = $.ajax({
            url: '@Url.Content("~/Rack/ShowTransferSelectedDialog")',
            data: {
                rackfrom: "@Model.Rack.ITsysRackID",
                assettype: $(this).attr('id')//get the id for the clciked link, so that the submit button will call the associted action method.


                },
            type: 'get',
            success: function (html) {
                $('#showoptions').html(html);
                $("#showoptions").dialog("show"); //This could also be dialog("open") depending on the version of jquery ui.
            }
        });
        $.when(ajaxCall)
.then(function (data) { showDialog(data); });
    });

我有以下问题:

  1. $when(ajaxcall)和成功之间有什么区别?

  2. 在上面的代码中,如果删除$.when(ajaxCall),仍会显示对话框。那么有需要吗?

  3. 由于

    修改 但是我发现使用$.when(ajaxCall)的一个好处是我已经定义了一个自定义授权属性,如下所示: -

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    
        public class CheckUserPermissionsAttribute : AuthorizeAttribute
        {
    
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
    
    
            }
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
    
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
    
                    var viewResult = new JsonResult();
                    viewResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                    viewResult.Data = (new { IsSuccess = "Unauthorized", description = "Sorry, you do not have the required permission to perform this action." });
                    filterContext.Result = viewResult;
    
                }
    
            }
        }
    

    目前,如果用户点击链接显示对话框并且未授权他这样做,他将收到包含未授权消息的jAlert,如下所示: - ![在此输入图像说明] [1]

    但如果我删除$.when(ajaxCall),,则用户将不会收到未授权消息,而对话框将为空白..所以有人可以提出建议吗?

1 个答案:

答案 0 :(得分:1)

1)这是jQuery when

的定义
  

提供一种基于一个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。

将它用于单个ajax调用是没有意义的,您希望将它用于2个或更多,以便在执行某些代码之前等待它们完成。

2)我不知道showDialog做了什么,但您的对话框已经显示,因为在success处理程序中您有$("#showoptions").dialog("show");。同样,根本不需要在这里使用when