[Javascript] 非同步執行，如何延緩後面程式的處理 ??

恩恩
2025-12-10 14:00:29

版上的大家下午安，有個問題思考很久
搞不定
我目前開發一個功能 一鍵下載附檔
將網頁上的附檔，透過一個按鈕可以全部下載下來

有用到AJAX服務，設定檔案名稱 ajax_WmsAccessor.setAttachmentFileName
組成檔案URL後，執行下載檔案的功能函式openSoure(tSourceFileUrl)
似乎下載太快，三個檔案的名稱都一樣...檔案大小不一樣
試過加入alert() 延緩處理的程序，
下載的檔案就完全正確

請教高手們這個小問題，我可以如何處理，讓AJAX服務執行完 再跑後面的下載
謝謝大家

DWREngine.setAsync(false);
   if (tResultArray.length>0)
  {
    for(var i=0;i<tResultArray.length;i++)
        {
         ajax_WmsAccessor.setAttachmentFileName(tResultArray[i][2]); //設定附檔名稱
         var tSourceFileUrl = "/NaNaWeb/DownloadFile/"+tResultArray[i][0]+";"+"?action=downloadDocument" + "&docFileName=" + encodeURIComponent(tResultArray[i][0]);
         openSoure(tSourceFileUrl);     //下載檔案
         alert(tSourceFileUrl);
         }
   }
}

//下載原始檔
		function openSoure(pSourceFileUrl) {
			var iframe = document.createElement('iframe');
			iframe.src = pSourceFileUrl;
			iframe.setAttribute("class", "download");
			iframe.style.display = "none";
			document.body.appendChild(iframe);
			cleanDownload();
		}

這是網頁上要下載的三個檔案:

將alert() 拿掉後，下載的檔案名稱都同一個....

若有alert()延緩處理時間，檔案下載都成功