ajax实现一个前台的进度条,前台ajax实现上传文件并且有进度条

// ajax + jQuery上传

function UploadFile() {

var xhrOnProgress = function(fun) {

xhrOnProgress.onprogress = fun; //绑定监听

//使用闭包实现监听绑

return function() {

//通过$.ajaxSettings.xhr();获得XMLHttpRequest对象

var xhr = $.ajaxSettings.xhr();

//判断监听函数是否为函数

if (typeof xhrOnProgress.onprogress !== 'function')

return xhr;

//如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去

if (xhrOnProgress.onprogress && xhr.upload) {

xhr.upload.onprogress = xhrOnProgress.onprogress;

}

return xhr;

}

}

//获取文件

var file = $("#doc-form-file")[0].files[0];

var whether = $("#whether").val();

var form = new FormData();

form.append('file', file);

form.append('whether', whether);

// form.append("csrfmiddlewaretoken", '{{ csrf_token }}');

$.ajax({

type: 'POST',

url: '{:url("/web/save/upload")}',

data: form,

dataType: 'json',

processData: false, // 告诉jquery不转换数据

contentType: false, // 告诉jquery不设置内容格式

xhr: xhrOnProgress(function(e) {

var percent = e.loaded / e.total;

$("#progress").css("width", (percent * 100) + '%');

$('#progress').html(Math.round((percent * 100)) + '%');

if( percent == 1){

setTimeout(function() {

$("#show-progress").modal('close');

}, 1000);

}

}),

success: function(data) {

var json = JSON.parse(data);

switch (json['code']) {

case 200:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/tables")}';

}, 2000);

break;

case 300:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

}, 2000);

break;

case 301:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

}, 2000);

break;

case 302:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

}, 2000);

break;

case 304:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

}, 2000);

break;

case 305:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/goods/goodslist")}';

}, 2000);

break;

case 306:

$.DialogByZ.Autofade({

Content: json['msg']

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

}, 2000);

break;

}

// console.log(arg);

},

error: function() {

$.DialogByZ.Autofade({

Content: "网络错误,请稍后重试!"

});

setTimeout(function() {

location.href = '{:url("/web/save/index")}';

},2000)

return;

}

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例代码: HTML 文件: ```html <form id="upload-form" enctype="multipart/form-data"> <input type="file" name="file" id="file-input"> <input type="submit" value="上传" id="submit-btn"> </form> <div id="progress"> <div id="progress-bar"></div> </div> ``` JavaScript 代码: ```javascript $(document).ready(function() { // 当表单提交时 $('#upload-form').submit(function(event) { event.preventDefault(); // 获取要上传的文件 var file_data = $('#file-input').prop('files')[0]; // 创建一个 FormData 对象 var form_data = new FormData(); form_data.append('file', file_data); // 发送 Ajax 请求 $.ajax({ url: '/upload', type: 'POST', data: form_data, dataType: 'json', processData: false, contentType: false, xhr: function() { // 创建一个 XMLHttpRequest 对象 var xhr = new XMLHttpRequest(); // 监听上传进度 xhr.upload.addEventListener('progress', function(event) { if (event.lengthComputable) { // 计算上传进度,更新进度条 var percent = Math.round((event.loaded / event.total) * 100); $('#progress-bar').css('width', percent + '%'); } }, false); return xhr; }, success: function(data) { // 上传成功,处理服务器返回的数据 console.log(data); }, error: function(xhr, status, error) { // 上传失败,处理错误信息 console.log(error); } }); }); }); ``` 上面这段代码使用 jQuery 发送 Ajax 请求,创建了一个 FormData 对象来存储要上传的文件,并且设置了一些参数: - `dataType: 'json'` 表示服务器返回的数据是 JSON 格式,jQuery 会自动解析 JSON 数据; - `processData: false` 表示不要对 FormData 对象进行处理,让浏览器处理文件上传; - `contentType: false` 表示不要设置 Content-Type 请求头,让浏览器自动设置; - `xhr: function() {...}` 表示使用 XMLHttpRequest 对象来发送 Ajax 请求,并且监听上传进度。 在监听上传进度的回调函数中,计算上传进度并更新进度条的宽度。最后处理上传成功和上传失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值