jQuery的ajaxSubmit如何實現批量圖片非同步上傳?

背景:本人java磚工,最近做上傳功能,過程大概是:

創建了一個display:none的外部表單排除當前form來提交圖片.

按鈕點擊後 調用label 的點擊事件選擇圖片,var imgs= document.getElementById("itemfile")拿到dom結構等等...最後通過imgs.files.length循環ajaxSubmit提交圖片,理想過程是post請求添加毫秒後綴(.do?dateTime=...)通過for循環提交,後台再通過md5比對排除重複提交的文件;但是實際過程中發現因為for循環過程中第一個請求被第二個請求覆蓋,後台完全無法接收到第一個請求,如果是在不考慮使用定時器的情況下解決,求解。


謝邀

但是實際過程中發現因為for循環過程中第一個請求被第二個請求覆蓋

這一段的相關代碼可不可以貼一下。

ajax 請求是非同步的,我感覺可能是遇到了循環變數值的問題,如下的代碼:

for(var i=1;i&<10;i++){ window.setTimeout(function(){ // ←fi() console.log(i) },1000*i) }

一般這麼寫期待的是每隔一秒鐘依次輸出1到9的數字,但是實際運行情況是,每隔一秒鐘輸出一次數字10。

原因是 fi() 被延遲執行,當 fi() 中訪問變數 i 的時候,循環早已經結束了,循環的變數 i 最終的值為10,這時候會輸出 10 。

比較好的寫法是下面這樣:

for(var i=1;i&<10;i++){ var fii=function(out){ return function(){ console.log(out) } } window.setTimeout(fii(i),1000*i) }

通過調用一個函數,立即使用 i 的值。另外用一個循環體內的變數是沒用的,循環體內的變數的作用域和循環變數 i 是一樣的。關於 JS 中變數作用域,有許多需要注意的地方,此處不表。

不知道題主是不是遇到了這種問題。


推薦閱讀:

除了Bootstrap,有沒有更好的響應式框架用來開發外包項目?
2017前端技術規劃該包含什麼?
mongodb與mysql的應用場景?
react許可證的問題是否意味著要轉技術棧了?

TAG:JavaScript | jQuery | Java | 前端框架 |