@jxstjh/jhvideo
Version:
HTML5 jhvideo base on MPEG2-TS Stream Player
142 lines • 5.8 kB
JavaScript
/**
*@description: 网络类的封装
*@author: jsyang
*@date: 2021-06-03 13:56:31
*/
export default {
//GET请求
get: function (url, data, headers) {
if (data === void 0) { data = null; }
if (headers === void 0) { headers = null; }
// return this.ajax('GET', url, null);
return this.fetch('GET', url, data, headers);
},
//POST请求
post: function (url, data, headers) {
if (data === void 0) { data = null; }
if (headers === void 0) { headers = null; }
return this.fetch('POST', url, data, headers);
},
//PUT请求
put: function (url, data, headers) {
if (data === void 0) { data = null; }
if (headers === void 0) { headers = null; }
// return this.ajax('PUT', url, data);
return this.fetch('PUT', url, data, headers);
},
//Delete请求
del: function (url, data, headers) {
if (data === void 0) { data = null; }
if (headers === void 0) { headers = null; }
// return this.ajax('DELETE', url, data);
return this.fetch('DELETE', url, data, headers);
},
ajax: function (method, url, data, headers) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest, params = [];
xhr.responseType = 'json'; // 指定返回类型
xhr.onload = function () {
switch (xhr.status) {
case 200:
resolve(xhr.response);
break;
case 204:
resolve();
break;
case 401: // 401登录失败处理
//do something
reject();
break;
default: reject({ status: xhr.status, res: xhr.response });
}
};
xhr.open(method, url, true);
if (!headers) {
xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); // 设置content-type
}
else {
Object.entries(headers).forEach(function (_a) {
var k = _a[0], v = _a[1];
xhr.setRequestHeader(k, v); // 设置content-type
});
}
var ct = headers['Content-Type'] || headers['content-type'] || headers['Content-type'];
if (ct.indexOf('x-www-form-urlencoded') >= 0) {
var str_1 = '';
Object.keys(data).forEach(function (k, index) {
str_1 += (index === 0 ? "".concat(k, "=").concat(data[k]) : "&".concat(k, "=").concat(data[k]));
});
data = str_1;
}
else if (data.constructor === FormData) {
xhr.setRequestHeader('Content-Type', 'multipart/form-data;');
data = data;
}
else {
if (data) { // 将参数编码成表单的键值对形式
// for (let k in data) params.push(`${encodeURIComponent(k)}=${encodeURIComponent(data[k])}`);
// data = params.join('&');
data = JSON.stringify(data);
}
}
// xhr.withCredentials = true;// 支持跨域发送cookies
xhr.send(data);
});
},
fetch: function (method, url, data, headers) {
if (window && !window.fetch) {
return this.ajax(method, url, data, headers);
}
var params = [], init = {
method: method,
mode: 'cors',
headers: { 'Content-Type': 'text/plain;charset=UTF-8' },
// credentials: 'include',// 支持跨域发送cookies
};
if (headers) {
Object.entries(headers).forEach(function (_a) {
var k = _a[0], v = _a[1];
init.headers[k] = v;
});
}
var ct = init.headers['Content-Type'] || init.headers['content-type'] || init.headers['Content-type'];
if (data) { // 处理消息体
if (method === 'GET') {
for (var k in data)
params.push("".concat(encodeURIComponent(k), "=").concat(encodeURIComponent(data[k]), " "));
url += '?' + params.join('&');
}
else {
if (ct.indexOf('x-www-form-urlencoded') >= 0) {
var str_2 = '';
Object.keys(data).forEach(function (k, index) {
str_2 += (index === 0 ? "".concat(k, "=").concat(data[k]) : "&".concat(k, "=").concat(data[k]));
});
init.body = str_2;
}
else if (data.constructor === FormData) {
init.headers['Content-Type'] = 'multipart/form-data;';
init.body = data;
}
else if (ct.indexOf('application/json') >= 0) {
init.body = JSON.stringify(data);
}
else {
init.body = JSON.stringify(data);
}
}
}
return fetch(url, init).then(function (e) {
switch (e.status) {
case 200: return e.json();
case 204: break;
case 401: // 401登录失败统一处理
//do something
return Promise.reject();
case 403: return e.json().then(function (e) { return Promise.reject(e); }); // 服务端主动抛出错误
default: return Promise.reject({ status_code: 500, message: '服务器繁忙, 请稍后再试' });
}
});
}
};
//# sourceMappingURL=httpClient.js.map