首页 >> 编程相关小知识 >> 当前文章

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

2023年09月12日 阅读量:855

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

1. 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样式

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

3. JS代码

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. 效果图

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

觉得有用就点个赞吧 13
称:
箱:
容:
验证码:
本站累计访客数量:8766人
本站累计运行时长:172天
声明:本站大部分内容属于原创,转载请注明出处,请勿作商业用途!本站少部分资源来自互联网,如果有侵犯到您的权益,请联系本站【niceliusir@qq.com】删除,谢谢合作!