javascript - $.when(ajaxCall) 与成功

标签 javascript jquery ajax

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

$('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) 和 on success 之间有什么区别?

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

谢谢

编辑 但我发现使用 $.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) 这是 jQuery 的定义 when

Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.

将它用于单个 ajax 调用是没有意义的,您想将它用于 2 个或更多,因此您需要等待它们完成后再执行某些代码。

2) 我不知道 showDialog 的作用,但您的对话框已经显示,因为在您的 success 处理程序中您有 $("#showoptions")。对话框(“显示”);。再说一遍,根本不需要在此处使用 when

关于javascript - $.when(ajaxCall) 与成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25161023/

相关文章:

javascript - Typescript 中的导出功能

javascript - 无法在 Firefox 中播放 Mp3 文件

javascript - 实现自定义滑动通知的 react 组件

javascript - 如何创建一个 Shift 键 + 鼠标单击事件,单击时将黑色按钮的颜色更改为黄色按钮? JavaScript

带有循环赋值的 Javascript 函数

javascript - 创建动态选择(下拉)列表的最佳方法?

java - a4j :commandButton doesn't work

javascript - 在 PHP 中使用 Jquery 和 Ajax 的动态依赖选择框

javascript - AJAX jquery 表单发布不工作

javascript - 如何将 JS 文件与 dotnetnuke 中的模块、控件和模板链接起来?