Отключить ajaxStart по конкретному запросу - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть поле электронной почты, к которому прикреплен вызов удаленной проверки, чтобы проверить, существует ли введенный адрес электронной почты в системе. Когда пользователь печатает, вызывается метод контроллера, и он передает флаг обратно.

У меня также есть глобальное событие ajaxStart, присоединенное ко всем запросам ajax, которое показывает загрузчик и блокирует страницу. Я хочу предотвратить запуск 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 для подавления глобального прослушивателя событий - не знаете, как это сделать с помощью ненавязчивого Javascript.

1 Ответ

0 голосов
/ 11 апреля 2019

Узнав о .ajaxSend () , я решил попробовать это вместо .ajaxStart () . Смотрите различия этих двух событий здесь:

В чем разница между: 1. (ajaxStart и ajaxSend) и 2. (ajaxStop и ajaxComplete)?

.ajaxSend () и .ajaxComplete () запускаются один раз за запрос при отправке / завершении. Вот почему этим обработчикам передаются аргументы, а глобальным / пакетным - нет:

Я использовал аргумент объекта ajax, чтобы проверить, не является ли URL-адрес запроса удаленным вызовом проверки для подавления значка загрузки. Пока этот подход работает отлично.

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

$(document).ajaxStop(function () { $.unblockUI(); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...