我的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); });
});
我有以下问题:
$when(ajaxcall)
和成功之间有什么区别?
在上面的代码中,如果删除$.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),
,则用户将不会收到未授权消息,而对话框将为空白..所以有人可以提出建议吗?
答案 0 :(得分:1)
1)这是jQuery when
提供一种基于一个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。
将它用于单个ajax调用是没有意义的,您希望将它用于2个或更多,以便在执行某些代码之前等待它们完成。
2)我不知道showDialog
做了什么,但您的对话框已经显示,因为在success
处理程序中您有$("#showoptions").dialog("show");
。同样,根本不需要在这里使用when