本文將介紹使用$.ajax文件上傳時如何顯示進度條。在實際開發中,經常會遇到需要上傳文件的需求,而且通常需要顯示給用戶上傳的進度,以提高用戶體驗。$.ajax是jQuery中一個非常常用的方法,可以實現異步請求,包括文件上傳。本文將通過幾個實例,展示如何結合$.ajax和進度條插件,實現文件上傳時的進度顯示。
第一個例子是使用jQuery插件jQuery File Upload來實現文件上傳。首先需要引入相關的CSS和JS文件:
<link rel="stylesheet" > <link rel="stylesheet" > <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-file-upload/9.12.0/js/jquery.fileupload.js"></script>
接著,可以使用如下的HTML代碼來創建一個文件上傳表單:
<form id="fileUploadForm" action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit" class="btn btn-primary">上傳</button> </form>
然后,在JavaScript代碼中,我們使用$.ajax方法來處理文件上傳的請求。可以通過設置xhr的upload屬性來監聽上傳進度,代碼如下:
$('#fileUploadForm').fileupload({ dataType: 'json', progressall: function (e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); $('.progress .progress-bar').css( 'width', progress + '%' ); } });
在上述代碼中,progressall事件會在上傳進度發生變化時觸發,通過計算已上傳的字節數與總字節數的比例,來更新進度條的寬度。可以在HTML中添加如下的代碼來顯示進度條:
<div class="progress"> <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"> </div> </div>
通過上述代碼,上傳文件時會顯示一個進度條,可以實時顯示上傳進度。用戶體驗明顯提升。
除了使用jQuery插件外,也可以使用原生的JavaScript和HTML5的FormData對象來實現文件上傳并顯示進度條。首先,創建一個文件上傳表單:
<form id="fileUploadForm" action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit" class="btn btn-primary">上傳</button> </form>
然后,在JavaScript代碼中,使用FormData對象來處理文件上傳的請求,并監聽upload的progress事件來更新進度條的寬度:
$('#fileUploadForm').submit(function(e) { e.preventDefault(); var formData = new FormData(this); $.ajax({ url: $(this).attr('action'), type: "POST", data: formData, processData: false, contentType: false, xhr: function() { var xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener("progress", function(evt) { if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total * 100; $('.progress .progress-bar').css("width", percentComplete + '%'); } }, false); return xhr; }, success: function(res){ // 上傳成功的處理邏輯 }, error: function(res){ // 上傳失敗的處理邏輯 } }); });
在上述代碼中,創建FormData對象,并使用$.ajax方法來發送文件上傳請求。通過設置xhr的upload屬性來監聽上傳進度,并動態更新進度條寬度。
綜上所述,通過結合$.ajax和進度條插件,可以實現文件上傳時的進度顯示。無論是使用jQuery插件還是原生的JavaScript和HTML5,都可以輕松地實現這一功能。這對于用戶體驗的提升來說非常重要。