SweetAlert 2 и Inte rnet Explorer - PullRequest
       29

SweetAlert 2 и Inte rnet Explorer

0 голосов
/ 06 мая 2020

Итак, в основном мы используем SweetAlert2 на нашем веб-сайте. Все работает хорошо в различных веб-браузерах, таких как Chrome, Firefox, Edge, кроме Inte rnet Explorer.

Сначала - как почти все знают - SweetAlert2 использует стрелочные функции, которые не поддерживаются Inte rnet Проводник. Однако, как нам также известно, Inte rnet Explorer не поддерживает стрелочные функции, поэтому мы решили заменить стрелочную функцию функцией classi c.

From:

Swal.fire({
    title: 'Success',
    html: message,
    icon: 'success'
    }).then((result) => {
        window.location.reload();
});

Мы получить к этому:

Swal.fire({
    title: 'Success',
    html: message,
    icon: 'success'
    }).then(function (result) {
        window.location.reload();
});

И да, код сверху заставляет его работать в Inte rnet Explorer. Мы были счастливы, пока не осознали, что такой код также приводит к проблемам с AJAX POST-запросами, поэтому почти все функции в приложении перестали работать.

В противном случае - если мы вернемся к функциям стрелок в методе вызова SweetAlert2 - тогда все наши ajax почтовые запросы будут работать без каких-либо проблем.

@ edit => Подробнее о сценарии

Итак, после вызова ajax - почтовые данные отправляются в файл php, который проверяет, были ли отправлены почтовые данные с помощью метода isset (). Если это так, то он выполняет запрос к базе данных, иначе он возвращает код ошибки.

В сценарии, когда мы используем стрелочные функции - isset (), проверяющий данные сообщения, возвращает истину, и есть запрос.

В сценарии, когда мы не используем функцию стрелки - isset (), проверяющая данные сообщения, возвращает false, а вызов ajax возвращает код ошибки.

Таким образом, похоже, что данные сообщения из формы не отправляются .

@ edit2 - добавление js кода функции в ссылку ниже

$('.form-ajax').on('submit', function(event) {

    event.preventDefault();

    var link = $(this).attr('action');
    var redirect = false;
    var callback = false;

    // Sweet Ajax
    var confirm_question = false;
    var success_msg = false;

    if ($(this).attr('redirect')    !== undefined)      { redirect = $(this).attr('redirect'); }
    if ($(this).attr('callback')    !== undefined)      { callback = $(this).attr('callback'); }

    // Sweet Ajax
    if ($(this).attr('confirm')         !== undefined) { confirm_question = $(this).attr('confirm'); }
    if ($(this).attr('success')         !== undefined) { success_msg = $(this).attr('success'); }


    if (confirm_question !== false) {

        // Pytanie zostało określone
        Swal.fire({
            title: 'Potwierdzenie',
            html: confirm_question,
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Potwierdź',
            cancelButtonText: 'Anuluj'
            }).then(function (result) {
            if (result.value) {

                $.ajax({
                    url: link,
                    type: 'POST',
                    data: $(this).serialize(),
                    success: function(result) {

                        if (result == 'ok') {

                            var komunikat = 'Operacja została wykonana poprawnie.';

                            Swal.fire({
                                title: 'Sukces',
                                html: komunikat,
                                icon: 'success'
                            }).then(function (result) {
                                if (redirect) {
                                    window.location.replace(redirect);
                                } else {
                                    window.location.reload();
                                }
                            });

                        } else {

                            if (result == '405') {

                                if (callback) {
                                    $('#' + callback).html('<i class="fas fa-exclamation-circle"></i> Wystąpił błąd1. Odśwież stronę i spróbuj ponownie.');
                                } else {

                                    // swal fire
                                    Swal.fire({
                                        title: 'Błąd',
                                        html: 'Wystąpił błąd. Odśwież stronę i spróbuj ponownie.',
                                        icon: 'error'
                                    });

                                }

                            }
                        }
                    }
                });

            }
        });

    }

});

Выше функция возвращает "Wyst "pił błąd1. Odśwież stronę i spróbuj ponown ie. " если мы не используем стрелочные функции, это означает, что результат возвращает 405.

Мы застряли и не знаем, что еще мы можем попробовать?

1 Ответ

0 голосов
/ 07 мая 2020

Ладно, ребята, так что я нашел решение, которое работает для меня.

Я сделал простую PHP проверку, использует ли пользователь Inte rnet Explorer или какие-либо другие веб-сайты. В зависимости от ситуации - скрипт загружает JS для Inte rnet Explorer (который фактически не использует стрелочные функции) или JS для других веб-сайтов (которые фактически используют стрелочные функции).

<?php 

// check user's agent
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);

if(count($matches)<2){
    preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){

    // yes, user is using IE => load JS for IE

    ?>
        <script type="text/javascript" src="javascript-ie.js"></script>
    <?php

} else {

    // no, user is using web browser other than IE => load default JS

    ?>
        <script type="text/javascript" src="javascript.js"></script>
    <?php

} ?>
...