ОБНОВЛЕНИЕ: по версии Webkit r230963 эта проблема была решена в Webkit.
===========
Начиная с недавнего обновления Safari 11.1 на macOS и iOS, а также в Safari Technology Preview 11.2, вызовы $.ajax
в моем веб-приложении терпят неудачу, когда поле input[type=file]
не имеет выбранного файла (это не требуется в моей форме). Никакой сбой, если в поле есть выбранный файл.
Обратный вызов error
запуска ajax
и консоли Safari содержит следующее сообщение: Failed to load resource: The operation couldnt be completed. Protocol error
Failed to load resource: The operation couldnt be completed. Protocol error
. Я HTTPS и отправляю в место в том же домене (и сервере) также через HTTPS.
Перед обновлением 11.1 вызов $.ajax
передавался просто отлично, когда не был выбран файл. В последних версиях Chrome и Firefox нет проблем.
Соответствующие части моего кода:
Вход:
Browse... <input id="file-upload" type="file" name="image" accept=".jpg,.jpeg">
JS:
var formData = new FormData($(this)[0]);
$.ajax({
type: 'POST',
enctype: 'multipart/form-data',
url: '../process.php',
data: formData,
contentType: false,
processData: false,
cache: false,
success: function(response) { ... },
error: function() { //my code reaches here }
});
Как временное (надеюсь) решение, я обнаруживаю пустое поле файла и formData
его из formData
перед вызовом ajax
и все работает как ожидалось/раньше:
$("input[type=file]").each(function() {
if($(this).val() === "") {
formData.delete($(this).attr("name"));
}
});
Я что-то делаю неправильно, есть ли проблема с Safari, или есть изменения в Safari, которые нужно учитывать сейчас в вызовах ajax?