从DOM中删除iframe总是会停止从该iframe发布的上传内容吗?

时间:2010-07-14 01:22:28

标签: javascript dom iframe upload file-upload

我正在使用iframe进行异步文件上传,我想知道是否只是从DOM修剪iframe就足以取消上传。

This discussion似乎暗示这对整个问题来说是一个糟糕的方法,但令人讨厌的是JS专家拒绝透露他的解决方案。

无论如何,删除iframe在Gecko + WebKit中有效,但我想知道人们是否有其他DOM实现的经验。

2 个答案:

答案 0 :(得分:2)

讨论中的那个家伙并不清楚他在谈论什么,IMO。许多人称自己为专家,但他们只是空壳的大枪。如果您想进行异步文件上传,可以使用Flash。我通常不建议使用Flash,但SWFUpload小部件是IMO,它是最好的之一。

http://www.swfupload.org/

除此之外,你可以看看这个,代码很难看,但作者似乎肯定这是跨浏览器。

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

要回答您的问题:不,删除iframe并不能保证下载真的会停止,或者下载过程已在服务器端有效取消。这是因为从DOM中删除iframe并不能保证某些东西仍在使用它,因此不会被垃圾收集。

您可以简单地设置不同的目标网址(例如:“about:blank”),而不是删除iframe,这通常会切断与服务器的连接,并最终停止正在进行的任何数据传输。然后,您可以在此之后删除iframe。

但是,我建议你有一个两步过程,你上传文件,以及一个包含一些哈希值的隐藏字段。该文件存储在服务器上的临时目录中。上传完成后,您使用相同的哈希发出第二个请求以验证文件上载完成并完成上载处理。这样可以确保如果下载在中途被取消,但文件已经上传到服务器,那么您只是没有完成该过程,而您可以稍后让另一个进程清理临时上载的文件。

第一种解决方案更简单,但需要Flash :(

答案 1 :(得分:0)

很可能不是。通常,JS引擎从DOM主体运行异步。更改DOM不会停止正在处理的内容。

现在,如果JS引用了DOM的缺失部分,或者检查是否存在某些内容以便继续,那么这可能会有效。