解决pad在网络不好的情况下,将拍照的图片缓存在客户端,在网络好的情况下在上传到服务器,前端实现

  me.save_photo = function(ele, src) {
        var userList=[];
        var fileList = [];
        var obj = {
            FILE_DATA: src,
            NODE_ID: me.nodeId,
            CHILD_ID: ele.data('id') + '',
            IMAGE_NAME: ele.children("p").text(),
        };
        fileList.push(obj);
        userList.push(fileList);
        debugger
        //调 影像信息维护 接口
        var url = YT.dataUrl('common/uploadImageHandler');
        debugger
        YT.log.info('fileList',fileList);
        var params = {
            OBJECTTYPE: 'Customer',
            OBJECTNO: incomeData.CUSTOMERID,
            RELATIVEOBJECTTYPE: 'Customer',
            RELATIVEOBJECTNO: incomeData.CUSTOMERID,
            IMAGETYPE: 'Customer', // M 影像类型
            SEQ_NO: 'NCMS_1',
            IMAGEID: me.IMAGEID || '',
            FILE_LIST: fileList,
            USER_LIST:userList

        }
        YT.ajaxData(url, params, function(res) {
            debugger
            if (res.STATUS == '1') {
                me.IMAGEID = res.IMAGEID;
                YT.alertinfo('保存成功');
            }

        })
    }
ajax回调函数
  /**
     * @description 客户端native ajax 请求<br>
     *              接口名称:post <br>
     * @param {url}
     *            url 请求地址
     * @param {Object}
     *            params 请求参数
     * @param {function}
     *            success 成功回调函数名称
     * @param {function}
     *            failure 失败回调函数名称
     * @example YT.ajaxData('/mbank/login/login.do',{p1:'x'},function(rst){//执行成功回调函数},function(){//执行失败回调函数});
     */
    ajaxData : function ( url , params , success , failure ) {
        if ( !!params[ 'ONCE_HIDE_MSG' ] ) {
            let SOME_URL = url.match( /[\/-\\][A-z]+[\/-\\][A-z]+\.do/g )
            if ( SOME_URL instanceof Array ) {
                SOME_URL = SOME_URL[ 0 ]
                YT.setData( "COMP_EVENT" , `ONCE_HIDE_MSG_URL_${ SOME_URL }` , true )
            }
        }
        YT.openWaitPanel( "正在加载数据,请耐心等待" );
        
        function CENTER_FUN( data ) {
            data = YT.JsonEval( YT.JsonToStr( data ).replace( /\\"/g , '"' ).replace( /"{/g , '{' ).replace( /}"/g , '}' ) );
            success && success( data )
        }
        
        if ( DEBUG === 2 ) {
            params[ 'USERID' ] = params[ 'USERID' ] || 'test11';
        }
        YT.Client.post( url , params , CENTER_FUN , failure )
    } ,


  post : function ( url , params , success , failure ) {
            debugger
            YT.log.debug( '==========\t' + url + '\t==========' );
            YT.log.debug( params );
            try {
                if ( YT.isEmpty( failure ) || !YT.isFunction( failure ) ) {
                    debugger
                    failure = function ( rsp ) {
                        YT.hideWaitPanel();
                        // YT.alertinfo(rsp.MSG || NS.MSG.MsgAjaxError);
                        var msg = NS.MSG.MsgAjaxError;
                        if ( rsp && !YT.isEmpty( rsp.MSG ) ) {
                            msg = rsp.MSG;
                        }
                        YT.alertinfo( msg );
                    }
                }
                var cfg = {
                    url : url ,
                    params : params ,
                    success : function ( rpdata ) {
                        YT.log.debug( rpdata );
                        YT.hideWaitPanel();
                        if ( rpdata.STATUS === '1' ) {
                            debugger
                            success && success( rpdata );
                            YT.Collection.timeUrl( url , rpdata ? (rpdata.STATUS || '120') : '120' );
                        } else {
                            $( '#mainBody' ).find( '.ui-prev-loading' ).removeClass( 'ui-prev-loading' );
                            if ( rpdata.STATUS === '005' ) { // 判断用户session是否超时
                                YT.sessionTimeout();
                                YT.Collection.timeUrl( url , rpdata ? (rpdata.STATUS || '120') : '120' );
                            } else if ( rpdata.STATUS === '006' ) { // 重复提交
                                YT.alertinfo( '' + rpdata.MSG );
                                YT.Collection.timeUrl( url , rpdata ? (rpdata.STATUS || '120') : '120' );
                            } else { // 状态码非成功状态
                                let SOME_URL = url.match( /[\/-\\][A-z]+[\/-\\][A-z]+\.do/g )
                                if("/common/uploadImageHandler"== "SOME_URL"){
                                    YT.log.debug("测试数据影像数据");

                                }
                                let HAS_ONCE_HIDE_MSG_URL = false;
                                if ( SOME_URL instanceof Array ) {
                                    SOME_URL = SOME_URL[ 0 ]
                                    if ( YT.getOneData( "COMP_EVENT" , `ONCE_HIDE_MSG_URL_${ SOME_URL }` ) ) {
                                        HAS_ONCE_HIDE_MSG_URL = true;
                                    }
                                }
                                if ( !YT.getOneData( "COMP_EVENT" , "ONCE_HIDE_MSG" ) && !HAS_ONCE_HIDE_MSG_URL ) {
                                    // YT.alertinfo( rpdata[ 'MSG' ] );
                                }
                                failure && failure( rpdata );

                                YT.log.debug("测试数据8888");
                                // YT.Collection.timeUrl( url , rpdata ? (rpdata.STATUS || '120') : '120' );
                            }
                        }
                    } ,
                    failure : function ( rpdata ) {
                        debugger
                        $( '#mainBody' ).find( '.ui-prev-loading' ).removeClass( 'ui-prev-loading' );
                        failure && failure( rpdata );
                        YT.Collection.timeUrl( url , rpdata ? (rpdata.STATUS || '120') : '120' );
                        // YT.hideWaitPanel();
                        // 对网络连接异常做弹框提示
                        if ( rpdata === "-900" || rpdata === -900 ) {
                            YT.log.debug("测试数999");
                            YT.geneSTR(data , callback );
                            // YT.saveImageInfo(url,params);

                        }
                    }
                };
                if ( DEBUG ) {
                    YT.Client.mock( cfg );
                    YT.hideWaitPanel();
                } else {
                    cfg.success = YT.getFunctionName( cfg.success );
                    cfg.failure = YT.getFunctionName( cfg.failure );
                    _callHandler( "post" , JSON.stringify( cfg ) );
                }
            } catch ( e ) {
                YT.alertinfo( '通讯组件异常' , 'post:' + e );
            }
        } ,

各位江湖救急,请各位大佬帮忙

具体的流程图如下

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。