2010-07-14 57 views
1

我正在做一些異步文件上傳與iframes,我想知道如果簡單地修剪從DOM的iframe就足以取消上傳。從DOM中刪除iframe是否會停止從該iframe發送的上傳?

This discussion似乎暗示這是一個糟糕的方法來解決整體問題,但惱人的是,JS專家拒絕透露他的解決方案。

無論如何,刪除iframe在Gecko + WebKit中的作品,但我想知道如果人們有其他DOM實現的經驗。

+0

FYI:。BigResource歷來被感染的各種髒東西的我避免可能的情況下 – 2010-07-14 01:25:44

+1

好,謝謝,我改變了鏈接源到少垃圾郵件域名,這可能實際上是線程的原始來源 – guns 2010-07-14 01:30:11

+0

謝謝。雖然諾頓安全網絡目前報告它們是安全的,但幾個月前,他們在其所有結果旁邊都有一個紅色的X.幸運的是,即使點擊了您的鏈接我NoScript的保護與我同行 – 2010-07-14 01:31:39

回答

2

在討論中這個傢伙並不知道他在說什麼,海事組織。許多人稱自己爲專家,但他們只是空炮彈的大炮。如果你想做一些異步文件上傳,你可以可以使用Flash。我通常不推薦使用Flash,但SWFUpload小部件是IMO,它是最好的之一。

http://www.swfupload.org/

除此之外,你可以看看這個,代碼是相當難看,但在筆者看來肯定,這是跨瀏覽器。

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

要回答你的問題:沒有,刪除的iframe不保證下載將真正停止,或下載過程已經有效在服務器端取消。這是因爲從DOM中刪除iframe並不能保證某個地方不會繼續使用它,因此不會收集垃圾。

除刪除iframe的,你可以簡單地設置不同的目標網址(例如:輸入「about:空白」),通常斷絕與服務器的連接,並最終停止正在進行中的任何數據傳輸。之後,您可以刪除iframe。

但是,我會建議有一個兩步的過程,你上傳的文件,以及一個隱藏的字段包含一些哈希值。該文件存儲在服務器上的臨時目錄中。上傳完成後,您使用相同的散列值進行第二次請求,以驗證文件上傳完成並完成上載處理。這可以確保如果下載在中途被取消,但是文件已經上傳到服務器,那麼您完全不需要完成該過程,並且您可以稍後再讓其他進程清理臨時上傳的文件。

第一個解決方案是簡單的,但需要Flash :(

+1

謝謝,重置IFRAME的伎倆:'iframe.src =「JavaScript的:‘’;」',我感到更有信心,這是做正確的方式。WRT到我的設置,只需JavaScript + Nginx以及Upload和UploadProgress模塊​​就可以很好地工作。 – guns 2010-07-14 02:28:43

0

最有可能不是。通常,JS引擎在DOM主體中工作異步。更改DOM不會阻止正在處理的內容。

現在,如果JS引用DOM的缺失部分,或者檢查是否存在爲了繼續,可能會有效。