Будет удаление iframe от DOM, всегда останавливают загрузку, ОТПРАВЛЕННУЮ от этого iframe?

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

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

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

1
задан guns 14 July 2010 в 01:28
поделиться

2 ответа

Этот чувак в дискуссии не понимает, о чем он говорит, ИМО. Многие называют себя экспертами, но это всего лишь большие пушки с пустыми патронами. Если вы хотите выполнить асинхронную загрузку файлов, вы можете использовать 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: (

2
ответ дан 2 September 2019 в 23:05
поделиться

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

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

0
ответ дан 2 September 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: