У меня есть функция, вызываемая при выборе раскрывающегося списка, которая запускает всплывающее окно сладкое оповещение2, например:
function SwalPopup(ip, method) {
var methodmsg = method.charAt(0).toUpperCase() + method.slice(1);
swal.fire({
text: 'Are you sure you want to '+methodmsg+' ?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#3085d6",
confirmButtonText: 'Yes, '+methodmsg+'!',
cancelButtonColor: '#d33',
showCloseButton: true,
showLoaderOnConfirm: true,
preConfirm: function () {
return new Promise(function (resolve, reject) {
var ajaxCall = $.ajax({
url: 'wait.php',
type: 'GET',
dataType: 'json',
timeout: 5000
})
ajaxCall.done(function( response ){
resolve(response);
swal.fire({
type: 'success',
html: 'Component with IP: <?php echo $action_ip; ?>'+ip+' was '+methodmsg+' sucessfully!',
showCancelButton: false,
confirmButtonColor: '#3085d6',
confirmButtonText: 'Ok',
allowOutsideClick: false
});
});
ajaxCall.fail(function( jqXhr, textStatus, errorThrown ){
reject(errorThrown);
Swal.fire('Error! It was not possible to '+methodmsg+' component with IP: <?php echo $action_ip; ?>'+ip, 'Status: '+textStatus+' Error: '+errorThrown);
});
});
},
allowOutsideClick: false
});
}
Мой файл wait.php выполняет sleep(10) и возвращает true:
sleep(10);
echo json_encode(array(
'success' => true,
));
Итак, этот файл wait.php, вызываемый через Ajax, занимает 10 секунд, но я устанавливаю тайм-аут в 5 секунд для запроса ajax. До истечения времени ожидания во всплывающем окне Sweetalert отображается анимация загрузки и кнопка отмены. Но эта кнопка отмены не активна. Я хотел бы назначить ему функцию прерывания, чтобы запрос ajax можно было отменить, если он займет много времени.
Это ошибка?
Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это поведение будет изменено в следующем крупном выпуске SweetAlert2, вы можете отслеживать прогресс здесь: https://github.com/sweetalert2/sweetalert2/issues/1501
На данный момент используйте Swal.getCancelButton().removeAttribute('disabled') в качестве обходного пути.
Да, в предварительном подтверждении
Спасибо за ваш ответ @Limon Monte. Где бы я разместил обходной путь? Перед 1-м Swal.fire?