Я запускаю веб-приложение на основе Symfony 2.8, которое отправляет некоторые данные формы обратно контроллеру с помощью Ajax.
До сих пор все работало нормально, но с момента появления последнего обновления macOS до версии 10.13.4 пользователи, отправляющие форму, больше не работают в Safari. Другие версии MacOS и другие браузеры на 10.13.4 все еще работают нормально, так что это похоже на проблему в Safari. Конечно, я подал отчет об ошибке Apple, но я не думаю, что у меня когда-нибудь появятся отзывы...
Я смог изолировать источник проблемы: Отправка данных, которая включает в себя пустые входные файлы:
// safri_bug.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form name="app_booking" method="post" action="/test/submit.php">
<div><input type="text" id="someValue" name="value"></div>
<div><input id="thefile" type="file" name="file"></div>
</form>
<button id="bSubmit" type="button">Submit</button>
<script>
$(document).ready(function() {
$('#bSubmit').click(function() {
var form = $('form');
var data = new FormData(form[0]);
$.ajax({
url : '/submit.php',
type : 'POST',
data : data,
contentType: false,
processData: false,
context : this,
success : function(response) {
alert('success: ' + response);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error: ' + xhr.responseText + ' - ' + thrownError);
}
});
});
});
</script>
</body>
</html>
// submit.php
<?php
echo "OK";
результат
- Отправка формы отлично работает на всех проверенных браузерах и платформах, но в Safari в macOS 10.13.4
- В Safari на macOS 10.13.4:
- Если не выбран файл: запрос Ajax запускается около 20 секунд (выстраивается в тайм-аут?) И возвращается с пустым ответчиком sucess.
submit.php
НЕ вызывается. - Если был выбран файл: все работает отлично...
- Если не выбран файл: запрос Ajax запускается около 20 секунд (выстраивается в тайм-аут?) И возвращается с пустым ответчиком sucess.
Итак, это, кажется, ошибка в последнем обновлении Safari? Или что-то не так с моим кодом?
Любая идея, как предотвратить эту ошибку?