因此,基本上,我们正在使用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。
我们被卡住了,不知道我们还能尝试什么?
好吧,伙计们 - 所以基本上我找到了一个解决方案,这对我来说是可行的。
我做了一个简单的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
} ?>