// 获取合并的数据 export const mergeConfig = (_this, options) => { //判断url是不是链接 let urlType = /^(http|https):\/\//.test(options.url); let config = Object.assign({ timeout: _this.timeout }, _this.config, options); if (options.method == "FILE") { config.url = urlType ? options.url : _this.fileUrl + options.url; } else { config.url = urlType ? options.url : _this.baseUrl + options.url; } //请求头 if (options.header) { config.header = Object.assign({}, _this.header, options.header); } else { config.header = Object.assign({}, _this.header); } return config; } // 请求 export const dispatchRequest = (requestInfo) => { return new Promise((resolve, reject) => { let requestAbort = true; let requestData = { url: requestInfo.url, header: requestInfo.header, //加入请求头 success: (res) => { requestAbort = false; resolve(res); }, fail: (err) => { requestAbort = false; if (err.errMsg == "request:fail abort") { reject({ errMsg: "请求超时,请重新尝试", statusCode: 0, }); } else { reject(err); } } }; //请求类型 if (requestInfo.method) { requestData.method = requestInfo.method; } if (requestInfo.data) { requestData.data = requestInfo.data; } // #ifdef MP-WEIXIN || MP-ALIPAY if (requestInfo.timeout) { requestData.timeout = requestInfo.timeout; } // #endif if (requestInfo.dataType) { requestData.dataType = requestInfo.dataType; } // #ifndef APP-PLUS || MP-ALIPAY if (requestInfo.responseType) { requestData.responseType = requestInfo.responseType; } // #endif // #ifdef H5 if (requestInfo.withCredentials) { requestData.withCredentials = requestInfo.withCredentials; } // #endif let requestTask = uni.request(requestData); setTimeout(() => { if (requestAbort) { requestTask.abort(); } }, requestInfo.timeout) }) } // jsonp请求 export const jsonpRequest = (requestInfo) => { return new Promise((resolve, reject) => { let dataStr = ''; Object.keys(requestInfo.data).forEach(key => { dataStr += key + '=' + requestInfo.data[key] + '&'; }); //匹配最后一个&并去除 if (dataStr !== '') { dataStr = dataStr.substr(0, dataStr.lastIndexOf('&')); } requestInfo.url = requestInfo.url + '?' + dataStr; let callbackName = "callback" + Math.ceil(Math.random() * 1000000); // #ifdef H5 window[callbackName] = (data) => { resolve(data); } let script = document.createElement("script"); script.src = requestInfo.url + "&callback=" + callbackName; document.head.appendChild(script); // 及时删除,防止加载过多的JS document.head.removeChild(script); // #endif }); }