Будет ли удаление iframe из DOM всегда останавливать загрузку POSTed из этого iframe? - PullRequest
1 голос
/ 14 июля 2010

Я выполняю загрузку некоторых асинхронных файлов с помощью iframes, и мне интересно, достаточно ли просто удалить iframe из DOM, чтобы отменить загрузку.

Эта дискуссия , кажется, подразумевает, что это плохой подход к проблеме в целом, но, к сожалению, JS "эксперт" отказывается раскрыть свое решение.

В любом случае, удаление iframe работает в Gecko + WebKit, но мне интересно, есть ли у людей опыт работы с другими реализациями DOM.

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Этот чувак в дискуссии не имеет ни малейшего представления о том, о чем он говорит, ИМО. Многие называют себя экспертами, но это только большие пушки с пустыми снарядами. Если вы хотите выполнить загрузку асинхронного файла, вы можете использовать Flash. Обычно я не рекомендую Flash, но виджет SWFUpload, IMO, один из лучших.

http://www.swfupload.org/

Кроме этого, вы могли бы взглянуть на это, код довольно некрасив, но автор, похоже, подтверждает, что это кросс-браузер.

http://www.webtoolkit.info/ajax-file-upload.html

Чтобы ответить на ваш вопрос: нет, удаление iframe не гарантирует, что загрузка действительно прекратится или что процесс загрузки был фактически отменен на стороне сервера. Это связано с тем, что удаление iframe из DOM не гарантирует, что что-то где-то еще не используется, и поэтому не является сборщиком мусора.

Вместо удаления iframe вы можете просто установить другой целевой URL (например, «about: blank»), который обычно разрывает соединение с сервером и в конечном итоге останавливает любую передачу данных в процессе. После этого вы можете удалить iframe.

Однако я хотел бы предложить двухэтапный процесс, в котором вы загружаете файл вместе со скрытым полем, содержащим некоторое значение хеш-функции. Файл хранится во временном каталоге на сервере. Когда загрузка завершена, вы делаете второй запрос с тем же хешем, чтобы проверить завершение загрузки файла и завершить обработку загрузки. Это гарантирует, что если загрузка отменена на полпути, но файл уже был загружен на сервер, вы просто не завершите процесс, и у вас может быть просто другой процесс, который позже очистит временные загруженные файлы.

Первое решение проще, но требует Flash: (

0 голосов
/ 14 июля 2010

Скорее всего, нет.Обычно движок JS работает асинхронно от тела DOM.Изменение DOM не остановит то, что уже выполняется.

Теперь, если JS ссылается на недостающую часть DOM или проверяет, существует ли что-то для продолжения, это может сработать.

...