我需要從服務器下載一個文件並在客戶端上彈出「另存爲」框。我不能在Ajax中這樣做,所以我在客戶端JavaScript中創建了一個隱藏表單,並且當單擊按鈕時我在JS中提交表單。服務器獲取一個POST,然後它將文件作爲附件發回,客戶端生成'保存'框。任何使表單提交同步的方法?
到目前爲止,一切都很好,只是有兩個問題在這裏:
1 - 我想JS刪除新創建的形式,當用戶完成下載。我想我可以在DOM中留下一個無用的隱藏表單,但這並不理想。問題是,form.submit()
異步執行,所以我不知道何時刪除表格 - 我不能簡單地執行後執行form.submit()
2 - 有時用戶實際上需要下載兩個文件。此代碼不起作用:
form1.submit(); // download file 1
form2.submit(); // download file 2
客戶端只執行/完成的提交的一個 - 我可以把一個alert
兩者之間,例如兩者都做,但我需要正確地做到這一點。
如果我是用Ajax做到這一點,我只是讓調用同步,但我找不到一種方式來做到這一點與表單提交。理想情況下,我希望一個屬性使提交同步(如.setAttribute('async', false)
,這是行不通的)。
任何想法?或另一種方式來下載兩個文件與兩個另存爲對話框?
如果你不使用AJAX,表單提交是同步的,並導致頁面重新加載。 – Barmar
它將始終是同步的。由於javascript(包括表單提交)是除Ajax調用之外的同步和單線程模型。
欲瞭解更多幫助,請參閱http://stackoverflow.com/questions/17188149/how-to-make-form-submission-synchronous –
@ShreyosAdikari它在這個意義上並不是真正的同步。 「提交」功能立即返回,然後在某個時間點,響應將到達。由於回覆是附件,頁面不會被覆蓋。 – Pointy