Ajax实现一个简单的文件上传进度条

Ajax实现一个简单的文件上传进度条功能。

1. HTML代码

html 复制代码
<div class="form-group required">
	<label class="col-sm-3 control-label">文件名:</label>
	<div class="col-sm-6">
		<input id="fileName" name="fileName" class="form-control" type="text">
		<div class="progress-div">
			<span id="progress"></span>
		</div>
	</div>
	<input id="file-btn" class="btn btn-warning" type="button" value="上传文件" onclick="$('input[id=rel_file]').click()">
</div>

2. CSS样式

css 复制代码
.progress-div{
	width: 100%;
	height: 20px;
	background-color: #ffffff;
}
#progress{
	height: 20px;
	background-color: #1d9e7d;
	display: inline-block;
}

3. JS代码

javascript 复制代码
function save() {
	$('#submitBtn').attr('disabled',true);
	parent.layer.msg("正在上传,请稍后 ...");
	var data = new FormData($('#DatumForm')[0]);
	var url = irsCtxPath + "/biz/datumSave/upload";
	doUpload(data, url, uploadSuccess, 'progress');
	$('#submitBtn').attr('disabled',false);
}

// 上传成功后的回调函数
function uploadSuccess(data) {
	if (data.code == 0) {
		parent.layer.msg("操作成功");
		parent.reLoad();
		var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
		parent.layer.close(index);
	} else {
		parent.layer.alert(data.msg);
	}
}

// 上传
function doUpload(data, url, callBack, progressId) {
	$.ajax({
		url: url,
		type: "POST",
		data: data,
		xhr: function(){ //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数
			var myXhr = $.ajaxSettings.xhr();
			if(myXhr.upload){ //检查upload属性是否存在
				//绑定progress事件的回调函数
				myXhr.upload.addEventListener('progress',function(e) {progressHandlingFunction(e, '#' + progressId)}, false);
			}
			return myXhr; //xhr对象返回给jQuery使用
		},
		success : function(data) {
			callBack(data);
		},
		processData:false,
		contentType:false
	});
}

//上传进度回调函数:
function progressHandlingFunction(e, progressId) {
	if (e.lengthComputable) {
		$(progressId).attr({value : e.loaded, max : e.total}); //更新数据到进度条
		var percent = e.loaded/e.total*100;
		if (percent < 100) {
			$(progressId).html(" 正在努力上传中,已完成 " + percent.toFixed(2) + "%");
		} else {
			$(progressId).html(" 已完成 ");
		}
		$(progressId).css('width', percent.toFixed(2) + "%");
	}
}

4. 效果图

(这里不贴图了)

.
感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】

.

相关推荐
程序员黄同学22 分钟前
Python 中如何创建多行字符串?
前端·python
anyup_前端梦工厂1 小时前
uni-app 认识条件编译,了解多端部署
前端·vue.js·uni-app
Fetters041 小时前
一篇快速上手 Axios,一个基于 Promise 的网络请求库(涉及原理实现)
前端·ajax·axios·promise
蒟蒻的贤1 小时前
vue11.22
开发语言·前端·javascript
爱上语文1 小时前
Axios案例练习
前端·javascript·css·html
河畔一角1 小时前
升级react@18.3.1后,把我坑惨了
前端·react.js·低代码
天天进步20151 小时前
Vue 3 + Vite:构建闪电般快速的开发环境
前端·javascript·vue.js
Dragon Wu2 小时前
前端框架 Redux tool RTK 总结
前端·javascript·前端框架
yqcoder2 小时前
reactflow 中 useStoreApi 模块作用
前端·javascript
williamdsy2 小时前
【vue】关于异步函数使用不当导致的template内容完全无法渲染的问题
前端·javascript·vue.js