/** * ajax请求的代理类 1、系统在一般情况都使用本类进行ajax请求不在使用原生的或者jQuery的ajax 原因: * 1、本类对异常信息,错误信息进行了信息提示处理 2、本类与服务器端的AjaxResult.java 对应,接收的数据格式是AjaxResult.java * 的json格式数据 * * author :姜友瑶; 2016-06-02 */ var AjaxProxy = { requst: function (option) { // 是否开启遮罩 var params = { url: '', type: 'post', dataType: 'json', data: {}, cache: false, async: true, callback: null, fail:null, contentType: 'application/json;charset=utf-8', processData: true, showLoad: true, showLoadTip: '提交中', app: {},//vue实例 }; params = $.extend(params, option); if (params.contentType && params.contentType.indexOf('application/json') > -1 && params.type == 'post') { params.data = JSON.stringify(params.data) } let loading = {}; if (params.showLoad) { loading = params.app.$loading({ lock: true, text: 'Loading', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }); } return xhr = $.ajax({ url: params.url, type: params.type, data: params.data, dataType: params.dataType, contentType: params.contentType, processData: params.processData, async: params.async, success: function (data) { if (params.showLoad) { loading.close(); } if (data.status && data.status != '200') { if (data.info) { params.app.$message({ message: data.info, type: 'warning' }); } params.fail && params.fail(data); } else { params.callback && params.callback(data); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest, textStatus, errorThrown); params.app.$message.error('网络连接失败,请稍后重试!'); if (params.showLoad) { loading.close(); } }, /*complete:function(XMLHttpRequest,status){ //请求完成后最终执行参数 if(status=='timeout'){//超时,status还有success,error等值的情况 xhr.abort(); $.hideLoading() $.toast("网络请求超时,请检查网络后再试"); } }*/ }); } } function uploadForImage(url, data, callback, token) {//data是文件对象 let xhr = new XMLHttpRequest(); let form = new FormData(); form.append('file', data); function uploadProgress(e) { if (e.lengthComputable) { let progress = Math.round((e.loaded / e.total) * 100); callback(progress); } } /* * 监听请求的进度并在回调中传入进度参数*/ xhr.upload.addEventListener('progress', uploadProgress, false); // 第三个参数为useCapture?,是否使用事件捕获/冒泡 /* * 监听readyState的变化,完成时回调后端返回的response * */ xhr.addEventListener('readystatechange', function (e) { console.log(e); let response = e.currentTarget.response ? JSON.parse(e.currentTarget.response) : null; if (e.currentTarget.readyState === 4 && response) { callback(100, response); xhr.upload.removeEventListener('progress', uploadProgress, false) } }, false); xhr.open('POST', url, true); // 第三个参数为async?,异步/同步 xhr.setRequestHeader("accessToken", token); xhr.send(form); } var MTools = { closeIframe: function () { parent.layer.close(parent.layer.getFrameIndex(window.name)); }, /** 返回一个随机字符串 */ uuid : function() { function S4() { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); } return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); }, padLeftZero: function (str) { return ('00' + str).substr(str.length) }, isRealNum:function(val){ // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除, if(val === "" || val ==null){ return false; } if(!isNaN(val)){ //对于空数组和只有一个数值成员的数组或全是数字组成的字符串,isNaN返回false,例如:'123'、[]、[2]、['123'],isNaN返回false, //所以如果不需要val包含这些特殊情况,则这个判断改写为if(!isNaN(val) && typeof val === 'number' ) return true; } else{ return false; } }, formatDate: function (date, fmt) { var date = new Date(date); if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) } let o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() } for (let k in o) { if (new RegExp(`(${k})`).test(fmt)) { let str = o[k] + '' fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str)) } } return fmt }, /** * 字符串转数组 */ strToArray:function(str,patten,needToNum){ let arr=new Array(); if(str && str.trim().length>0){ arr=str.split(patten) if(needToNum){ let arrNum=new Array(); arr.forEach(item => { arrNum.push(parseInt(item)); }); arr=arrNum; } } return arr; }, isNotBlank:function(str){ return str !== undefined && str !== null && str !== '' }, isBlank:function(str){ return str == undefined || str == null || str == '' }, /** 页面定向 */ redirect : function(url) { window.location.href = url; }, createTreeModel : function(datas, seting) { // 配置对象 var _seting = { id : "id", // 选项的值 parent : "parentId",// 父节点值 } var _seting = $.extend(_seting, seting); // 用每一个节点的id标识一个节点对象,这里是所有对象的map集合 var _datas = {}; var nodeNength = datas.length; for (var i = 0; i < nodeNength; i++) { // 用id来唯一标识这个节点 _datas[datas[i][_seting.id]] = datas[i]; } // 构建树模型 root 是这课树的集合 var root = {}; root.children = []; for (var i = 0; i < nodeNength; i++) { var node = datas[i]; // _datas中 如果存在 datas 对应的 父节,把当前的节点放入父节点 if (_datas[node[_seting.parent]]) { var parent = _datas[node[_seting.parent]]; if (parent.children) { parent.children.push(_datas[node[_seting.id]]); } else { parent.children = []; parent.children.push(_datas[node[_seting.id]]); } } else {// 如果不存在父节点就放入根节点中 root.children.push(_datas[node[_seting.id]]); } } return root.children; }, /** json对象转Url参数**/ jsonToUrlParam:function(obj){ let str=""; for(item in obj){ if(obj[item]){ str+=item+"="+obj[item]+"&" } } return str; } }