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 | 前端框架 |