SweetAlert 2和Internet Explorer

问题描述 投票:0回答:1

因此,基本上,我们正在使用SweetAlert2在我们的网站上,一切都运行良好的各种网络浏览器,如Chrome,Firefox,Edge,除了Internet Explorer。

起初--几乎每个人都知道--SweetAlert2使用的是Internet Explorer不支持的箭头功能。然而,我们也知道--Internet Explorer不支持箭头功能,所以我们决定用经典功能覆盖箭头功能。

从。

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();
});

是的,上面的代码让它在Internet Explorer上工作。我们很高兴,直到我们意识到这种代码也会导致AJAX POST请求的问题,所以几乎所有的应用程序中的功能停止工作。

否则--如果我们切换回SweetAlert2调用方法中的箭头函数--那么我们所有的ajax post请求都能正常工作,没有任何问题。

@edit => 更多关于场景的信息。

所以在ajax调用之后--post数据被发送到php文件中,该文件使用isset()方法检查post数据是否已经发送。如果是,那么它就会对数据库进行查询,否则就会返回错误代码。

在我们使用箭头函数的情况下,isset()检查后数据返回true,有一个查询。

在场景中,当我们不使用箭头函数 - isset()检查后数据返回false和ajax调用返回错误代码。

所以看起来表单中的post数据没有被发送。

@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. 如果我们没有使用箭头函数,这意味着结果是返回405。

我们被卡住了,不知道我们还能尝试什么?

javascript internet-explorer sweetalert2
1个回答
0
投票

好吧,伙计们 - 所以基本上我找到了一个解决方案,这对我来说是可行的。

我做了一个简单的PHP检查,如果用户使用Internet Explorer或任何其他网站。根据不同的情况--脚本正在加载Internet Explorer的JS(实际上不使用箭头功能)或其他网站的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

} ?>
© www.soinside.com 2019 - 2024. All rights reserved.