jquery 的ajax 上传进度条

作者: 吴孝青 | 来源:发表于2018-03-31 23:45 被阅读79次

    一直在用ajax,但是没有做进度条,原来$.ajax里面封装了xhr,只要从这里面取得上传进度。

    这是将回调写到变数里

    将xhr对像放到 $.ajax({....,xhr});

    $.ajax({
        url:'xxxx',
        ....,
        //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数
        xhr: function(){ 
            myXhr = $.ajaxSettings.xhr();
              //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数
            if(myXhr.upload){
                //绑定progress事件的回调函数
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false);
            }
        //xhr对象返回给jQuery使用
            return myXhr; 
          },
        success:function(){}
    });
        
    

    绑定到'progress' 这里要自己再定义progressHandlingFunction

    //上传进度回调函数:
    function progressHandlingFunction(e) {
        if (e.lengthComputable) {
            //e.loaded 上传大小
            //e.total 文件大小
            var percent = e.loaded/e.total;
        }
    } 
    

    这是将回调写到ajax过程中

    先定一个方法

    var jqureAjaxXhrOnProgress = function(fun) {
        jqureAjaxXhrOnProgress.onprogress = fun; //绑定监听
        //使用闭包实现监听绑
        return function() {
            //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
            var xhr = $.ajaxSettings.xhr();
            //判断监听函数是否为函数
            if (typeof jqureAjaxXhrOnProgress.onprogress !== 'function')
                return xhr;
            //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
            if (jqureAjaxXhrOnProgress.onprogress && xhr.upload) {
                xhr.upload.onprogress = jqureAjaxXhrOnProgress.onprogress;
            }
            return xhr;
        }
    }
    

    再到$.ajax({...,})

    $.ajax({
        url:'xxxx',
        ....,
        xhr:jqureAjaxXhrOnProgress(function(e){
            var percent=e.loaded / e.total;
            $('#ajaxfilestext').html(percent);
        }),
        success:function(){}
    });
    

    再根据自己的需求写进度条。

    相关文章

      网友评论

        本文标题:jquery 的ajax 上传进度条

        本文链接:https://www.haomeiwen.com/subject/sywncftx.html