Самый простой и надежный способ, которым я занимался в прошлом, - это просто нацелить скрытый тег iFrame с помощью своей формы - тогда он будет отправлен в пределах iframe без перезагрузки страницы.
То есть, если вы не хотите использовать плагин, JavaScript или любые другие формы «магии», кроме HTML. Конечно, вы можете сочетать это с JavaScript или что-то еще. , ,
Вы также можете прочитать содержимое iframe onLoad
на наличие ошибок сервера или ответов об успешном завершении, а затем вывести его пользователю.
Chrome, iFrames и onLoad
-note- вам нужно только продолжать чтение, если вы заинтересованы в том, как настроить блокировщик пользовательского интерфейса при загрузке / загрузке
В настоящее время Chrome не вызывает событие onLoad для iframe, когда оно используется для передачи файлов. Firefox, IE и Edge запускают событие onload для передачи файлов.
Единственное решение, которое я нашел для Chrome - это использование файла cookie.
Чтобы сделать это в основном, когда загрузка / загрузка начата:
- [Клиентская сторона] Начать интервал для поиска наличия cookie
- [Server Side] Делайте все, что вам нужно с данными файла
- [Server Side] Установить cookie для клиентского интервала
- [Клиентская сторона] Интервал видит cookie и использует его как событие onLoad. Например, вы можете запустить блокировщик пользовательского интерфейса, а затем onLoad (или при создании cookie) удалить блокировщик пользовательского интерфейса.
Использование куки для этого уродливо, но работает.
Я сделал плагин jQuery для решения этой проблемы для Chrome при загрузке, вы можете найти здесь
https: // github. ком / ArtisticPhoenix / JQuery-плагинов / BLOB / Master / iDownloader. JS
Тот же основной принцип применим и к загрузке.
Чтобы использовать загрузчик (включая JS, очевидно)
$('body').iDownloader({
"onComplete" : function(){
$('#uiBlocker').css('display', 'none'); //hide ui blocker on complete
}
});
$('somebuttion').click( function(){
$('#uiBlocker').css('display', 'block'); //block the UI
$('body').iDownloader('download', 'htttp://example.com/location/of/download');
});
А на стороне сервера, непосредственно перед передачей данных файла, создайте файл cookie
setcookie('iDownloader', true, time() + 30, "/");
Плагин увидит cookie, а затем вызовет обратный вызов onComplete
.