<input type="file" id="fileInput" multiple/> <button onclick="uploadFiles()">上傳</button>
在上面的代碼中,我們使用了input元素的type屬性設(shè)置為"file",以顯示文件選擇框,并將multiple屬性設(shè)置為true,允許用戶選擇多個(gè)文件。然后,我們添加了一個(gè)按鈕,用于觸發(fā)文件上傳的操作。 接下來(lái),我們需要編寫一個(gè)JavaScript函數(shù)來(lái)處理文件上傳的邏輯。這個(gè)函數(shù)將被綁定到按鈕的onclick事件上。<script> function uploadFiles() { var fileInput = document.getElementById("fileInput"); var files = fileInput.files; var formData = new FormData(); for (var i = 0; i< files.length; i++) { formData.append("file" + i, files[i]); } var xhr = new XMLHttpRequest(); xhr.open("POST", "/upload", true); xhr.upload.onprogress = function(e) { if (e.lengthComputable) { var percentage = Math.round((e.loaded / e.total) * 100); console.log(percentage + "%"); } }; xhr.onload = function() { if (xhr.status === 200) { console.log("上傳成功"); } else { console.log("上傳失敗"); } }; xhr.send(formData); } </script>
在上面的代碼中,我們首先獲取文件選擇框的對(duì)象,并通過files屬性獲取用戶選擇的文件列表。然后,我們創(chuàng)建一個(gè)FormData對(duì)象,用于將文件數(shù)據(jù)添加到請(qǐng)求中。接下來(lái),我們創(chuàng)建一個(gè)XMLHttpRequest對(duì)象,并使用open方法設(shè)置請(qǐng)求的類型、URL和是否異步。然后,我們?yōu)閄MLHttpRequest對(duì)象的upload屬性的onprogress事件綁定一個(gè)回調(diào)函數(shù),以實(shí)時(shí)獲取上傳進(jìn)度。在回調(diào)函數(shù)中,我們可以通過e.loaded和e.total屬性計(jì)算出上傳的百分比,并將其打印到控制臺(tái)。最后,我們?yōu)閄MLHttpRequest對(duì)象的onload事件綁定一個(gè)回調(diào)函數(shù),在上傳完成后根據(jù)響應(yīng)的狀態(tài)碼判斷上傳是否成功。如果狀態(tài)碼為200,則表示上傳成功,否則表示上傳失敗。 通過上面的代碼,我們實(shí)現(xiàn)了使用Ajax異步請(qǐng)求進(jìn)行多個(gè)文件上傳的功能,并能實(shí)時(shí)獲取上傳進(jìn)度和判斷上傳是否成功。用戶可以選擇多個(gè)圖片文件,然后點(diǎn)擊上傳按鈕,即可將這些圖片上傳到服務(wù)器。這樣,用戶在上傳過程中無(wú)需等待頁(yè)面刷新,而可以繼續(xù)進(jìn)行其他操作,大大提升了用戶體驗(yàn)。 綜上所述,使用Ajax異步請(qǐng)求進(jìn)行多個(gè)文件上傳是一種高效和方便的方式。通過使用Ajax技術(shù),我們可以在不刷新整個(gè)頁(yè)面的情況下,將多個(gè)文件同時(shí)上傳到服務(wù)器,并實(shí)時(shí)獲取上傳進(jìn)度和上傳成功或失敗的回調(diào)信息。這種方式不僅能提高用戶體驗(yàn),還適用于各種Web開發(fā)場(chǎng)景,如圖片分享、文件管理等。因此,掌握使用Ajax進(jìn)行多個(gè)文件上傳的方法對(duì)于Web開發(fā)人員來(lái)說非常重要。