SweetAlert2: некоторые трудности с настройкой моего оповещения

Я пытаюсь использовать sweetAlert2. https://sweetalert2.github.io/

План выглядит следующим образом:

1) Отображение основного оповещения

2) Если он нажимает на "Отмена", я нормально закрываю оповещение.

3) Если он нажимает на "ОК", то кнопка переходит в положение загрузки, но оповещение не закрывается. А тем временем я делаю запрос Ajax. И когда все закончится, только тогда я смогу закрыть 1-е оповещение и просмотреть второе.

4) Когда я нажимаю «ОК» во втором предупреждении, страница перезагружается.

Но на данный момент я не могу хорошо справиться с тем, как отображать предупреждения, когда я нажимаю «ОК» и «Отмена».

У меня есть этот код ниже:

                Swal.fire({
                    title: 'Change to '+planName,
                    text: message,
                    icon: "info",
                    showCancelButton: true,
                    showLoaderOnConfirm: true,
                    preConfirm: function () {
                        // todo - actually change the plan!
                        $.ajax({
                            url: changeUrl,
                            method: 'POST'
                        }).done(function(){
                            Swal.fire({
                                title: 'Plan changed !',
                                icon: 'success',

                            },function() {
                                location.reload();
                            })
                        });
                    }
                });

Когда я нажимаю ОТМЕНА в первом предупреждении, все идет хорошо. Но если я нажму «ОК», я увижу, что кнопка подтверждения переходит в «загрузчик», но оповещение сразу же закрывается. Затем выполняется мой запрос Ajax, а затем отображается второе предупреждение.

Может ли кто-нибудь помочь мне, пожалуйста?

РЕДАКТИРОВАТЬ: текущий код:

                Swal.fire({
                    title: 'Change to '+planName,
                    text: message,
                    icon: "info",
                    showCancelButton: true,
                    showLoaderOnConfirm: true,
                    preConfirm: function () {
                        // todo - actually change the plan!
                        return $.ajax({
                            url: changeUrl,
                            method: 'POST'
                        }).done(function(){
                            Swal.fire({
                                title: 'Plan changed !',
                                icon: 'success',

                            },function() {
                                location.reload();
                            })
                        });
                    }
                });

person eronn    schedule 24.01.2020    source источник


Ответы (1)


Как насчет этого

Swal.fire({
  title: 'Change to '+planName,
  text: message,
  icon: "info",
  showCancelButton: true,
  showLoaderOnConfirm: true,
  preConfirm: function () {
    // todo - actually change the plan!
    return $.ajax({
      url: changeUrl,
      method: 'POST'
    }).done(function(){
      Swal.fire({
        title: 'Plan changed !',
        icon: 'success',

      },function() {
        location.reload();
      })
    });
  }
});

Вот песочница с похожей реализацией https://codesandbox.io/s/muddy-smoke-5gwf0

person VivekN    schedule 24.01.2020
comment
Спасибо за ваш! Это уже лучше! Когда я нажимаю «ОК», кнопка переключается в режим загрузки, и первое предупреждение остается, пока выполняется запрос Ajax. Но как только запрос закончен, первое оповещение закрывается, а второе не открывается. Я пытался следовать вашим указаниям и вдохновлялся вашим кодом в песочнице, но все же он кажется последовательным, я не понимаю. Я обновил свой первый пост текущим кодом - person eronn; 24.01.2020
comment
Я также пробовал с вашим кодом. В песочнице это работает, но когда я помещаю его в свое приложение для тестирования, у меня точно такая же проблема. - person eronn; 24.01.2020
comment
Можете ли вы поделиться ссылкой на то же самое, чтобы я мог проверить это? - person VivekN; 25.01.2020
comment
Ничего себе, я думаю, есть проблема... codepen.io/kiuega/pen/vYEPWwq ?editors=1010 Здесь все работает отлично. И если я проверю тот же код из своего приложения, это не сработает. За исключением того, что в моем приложении я снова использую webpack для глобальной загрузки SweetAlert2. С другой стороны, если я вставляю CDN sweetAlert, то у меня он тоже отлично работает. Это странно - person eronn; 25.01.2020
comment
Я решил проблему. Удивительно... Я удалил пакет sweetAlert2 и переустановил его. И теперь это работает. Я не знаю, почему раньше была проблема, это странно - person eronn; 25.01.2020
comment
Однако location.reload() не работает в функции() в SweetAlert. - person eronn; 25.01.2020
comment
Хорошо, я просто добавил .then(function(){}) вместо, function() и это работает - person eronn; 25.01.2020