Неблокирующая загрузка файлов в Iframe - PullRequest
2 голосов
/ 12 октября 2011

У меня есть кнопка, которая при нажатии открывает оверлей, который является формой в фрейме.При загрузке файла мне удалось удалить оверлей и перенаправить родительское окно на другую страницу при отправке.Проблема здесь:

Если пользователь загружает огромный файл, файл должен быть загружен первым, прежде чем пользователь будет перенаправлен.Есть ли другой способ, где файл загружается, и в то же время оверлей закрывается и родительское окно перенаправляется без потери загрузки файла?

С уважением,

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Для меня решение довольно простое. Не используйте iframe для загрузки файла. Просто поместите свою форму с диалогом загрузки файла на главную страницу. Если загрузка завершена, сервер может отправить перенаправление обратно клиенту, а затем пользователь перенаправляется на новый сайт. Или есть проблема с таким простым решением?

UPDATE Поскольку простое решение не работает, я предлагаю другое решение. Добавьте прослушиватель события загрузки в iframe. Если вызывается обработчик события onload (это означает, что загрузка файла завершена), то перенаправьте пользователя. Чтобы перенаправить пользователя, вы можете использовать window.location.href = "your new url"; Но имейте в виду, что вы добавляете прослушиватель событий после того, как файловая форма iframe полностью загружена, или вы должны игнорировать первое запущенное событие (которое будет формой загруженного файла) в вашем событии обработчик.

0 голосов
/ 12 октября 2011

Для этой цели я использую плагин Valum или плагин формы jQuery .

Если вы настаиваете на загрузке файла iframe, см. Более старую версию Загрузка файла AJAX Valum ,Либо используйте его пакет, либо посмотрите код для вдохновения.Не запутайтесь в имени;он не использует AJAX, но iframe для загрузки файлов.

Обратите внимание, что более новая версия плагина Valum , вероятно, также использует AJAX.

0 голосов
/ 12 октября 2011

просто попробуйте это ...

  1. когда отправка формы завершена (означает, что файл загружен) на стороне сервера, вам нужно установить флаг сеанса, например, $ _SESSION ['file_uploaded'] = TRUE;

Перед шагом 1 в родительском окне вам нужно написать функцию ajax для проверки сеанса. Эта функция js ajax постоянно связывается с сервером после загрузки оверлея (iframe).
когда сервер возвращает true, вы можете скрыть наложение и затем перенаправить страницу в другое место.

...