根据特定要求禁用ajaxStart

时间:2019-04-08 15:13:27

标签: jquery ajax asp.net-mvc

我有一个电子邮件字段,上面附加了一个远程验证电话,以验证输入的电子邮件是否存在于系统中。用户键入后,将调用controller方法,并将其传递回标志。

我还对所有ajax请求附加了一个全局ajaxStart事件,该事件显示了正在加载的微调器并阻止了该页面。我想防止ajaxStart在此特定功能上执行。据我所知,没有对象传递给ajaxStart事件,并且我不确定如何在此特定请求中禁止它。

这是呈现的html:

<input class="form-control" data-val="true" data-val-remote="Email already exists" data-val-remote-additionalfields="*.Email" data-val-remote-type="POST" data-val-remote-url="/account/emailexists" id="Email" name="Email" placeholder="Business Email" type="email" value="" />

模型视图:

public class RegisterViewModel
{
    [Remote("EmailExists", "Account", HttpMethod = "POST", ErrorMessage = "Email already exists")]
    public string Email { get; set; }
}

帐户控制器:

[AllowAnonymous]
[HttpPost]
public JsonResult EmailExists(string Email)
{
   var exists = Email.UserExists();
   return Json(exists, JsonRequestBehavior.AllowGet);
}

Javascript:

$(function () {
    $(document).ajaxStart(function () {
         // Return if this is '/account/emailexists'
         blockUI();
    }).ajaxStop($.unblockUI);

    //...

对于所有其他ajax函数,我正在使用global:false参数来抑制全局事件侦听器-不确定如何使用Unobtrusive Javascript执行此操作。

1 个答案:

答案 0 :(得分:0)

了解了.ajaxSend()之后,我决定尝试使用该方法,而不是.ajaxStart()。在此处查看这两个事件的区别:

What's the difference between : 1. (ajaxStart and ajaxSend) and 2. (ajaxStop and ajaxComplete)?

  

.ajaxSend()和.ajaxComplete()在发送/完成时每个请求触发一次。这就是为什么这些处理程序传递参数而全局/批处理参数不传递参数的原因:

我使用ajax对象参数来查看请求url是否来自远程验证调用,以禁止加载图标。到目前为止,这种方法行之有效。

$(document).ajaxSend(function(e, xhr, settings) {
    if (settings.url == '/account/emailexists') return;
    blockUI();
});

$(document).ajaxStop(function () { $.unblockUI(); });