**因为我不确定中台在应用时,有没有axios之类的依赖库,
所以在sdk外部封装了ajax。尽量做到一处封装,处处可用。**
unicomMiddle.js
/* * @Author: yang * @Date: 2020-09-08 10:13:32 * @LastEditors: yang * @LastEditTime: 2020-09-08 16:53:24 * @FilePath: \vuex\src\components\unicomMiddle.js */var unicomMiddle = { /** * 创立Ajax * @param options */ Ajax(options) { // 新建一个对象,用处承受XHR对象 var xhr = null; // 第一步创立XMLHttpRequest对象 || 同时专任IE // 首先检测原生XHR对象是否存在,如果存在则返回它的新实例 if (typeof XMLHttpRequest != "undefined") { xhr = new XMLHttpRequest(); // 而后如果原生对象不存在,则检测ActiveX对象 } else if (typeof ActiveXObject != "undefined") { // 如果存在,则创立他的对象,但这个对象须要一个传入参数,如下: if (typeof arguments.callee.activeXString != 'string') { // 对象版本 var versions = [ 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML.XMLHTTP' ], i, len; for (i = 0, len = versions.length; i < len; i++) { try { // 须要versions数组中的某个项,数组的7个项别离对应7个版本. new ActiveXObject(versions[i]); // arguments是javascript函数的内置对象,代表传入参数的汇合, // callee就代表对象自身即new createXHR arguments.callee.activeXString = versions[i]; break; } catch (e) { // 跳过 } } } // 直到循环创立胜利为止,而后给本人增加一个属性叫activeXString xhr = new ActiveXObject(arguments.callee.activeXString); } else { // 如果这两种对象都不存在,就抛出一个谬误 throw new Error('No XHR object available'); } /** ** options形参解析: * data 发送的参数,格局为对象类型 * url 发送申请的url,服务器地址(api) * async 否为异步申请,true为异步的,false为同步的 * method http连贯的形式,包含POST和GET两种形式 */ options = options || {}; options.success = options.success || function () { }; options.fail = options.fail || function () { }; var data = options.data, url = options.url, async = options.async === undefined ? true : options.async, method = options.method.toUpperCase(), dataArr = []; // 遍历参数 for (var k in data) { dataArr.push(k + '=' + data[k]); } // GET申请 if (method === 'GET') { url = url + '?' + dataArr.join('&'); xhr.open(method, url.replace(/\?$/g, ''), async); xhr.send(); } // POST申请 if (method === 'POST') { xhr.open(method, url, async); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(dataArr.join('&')); } // 响应接管结束后将触发load事件 xhr.onload = function () { /** * XHR对象的readyState属性 * 0:未初始化。尚未调用open()办法。 * 1:启动。曾经调用open()办法,但尚未调用send()办法。 * 2:发送。曾经调用send()办法,但尚未接管到响应。 * 3:接管。曾经接管到局部响应数据。 * 4:实现。曾经接管到全副响应数据,而且曾经能够在客户端应用了。 */ if (xhr.readyState == 4) { // 失去响应 if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { // 解决胜利数据 var res; if (options.success && options.success instanceof Function) { res = xhr.responseText; if (typeof res === 'string') { res = JSON.parse(res); options.success.call(xhr, res); } } } else { // 处理错误数据 if (options.fail && options.fail instanceof Function) { options.fail.call(xhr, res) } } } else { // 抛出检测XHR对象的readyState属性 console.log('XHR was readyState:', xhr.readyState); } } }, getMsgCode(obj){ let url = `http://**/**/cuauth/smscode?mobile=${obj.tel}&clientId=${obj.clientId}&smsType=1` return new Promise((resolve,reject)=>{ this.Ajax({ url: url, method: 'GET', async: true, success: function (res) { // console.log('successful', res); resolve(res) }, fail: function (err) { console.log('fail', err); reject(err) } }) }) }, getCodeLogin(obj){ let url = `http://*****/**/**/smslogin?clientId=${obj.clientId}&mobile=${obj.tel}&code=${obj.captcha}&appType=2&redirectUrl=${obj.redirectUrl}` return new Promise((resolve,reject)=>{ this.Ajax({ url: url, method: 'GET', async: true, success: function (res) { // console.log('登录胜利,行将跳转能力平台!') if(res.code==200&&obj.redirectUrl){ window.location.href = obj.redirectUrl } resolve(res) }, fail: function (err) { console.log('fail', err); reject(err) } }) }) }} export default unicomMiddle
应用
import unicomMiddle from './unicomMiddle.js'export default { methods: { async getCode() { let parm = { tel: '17521077157', clientId: 'hfgo', } let result = await unicomMiddle.getMsgCode(parm) console.log(result) }, async getLogin(){ let parms = { tel: '17521077157', clientId: '**', captcha:'575356', redirectUrl:'http://www.baidu.com' } unicomMiddle.getCodeLogin(parms).then(res=>{ console.log(res)//{code: 200, msg: "短信登录胜利."} code:200代表登录胜利 }) } },}</script>