XMLHttpRequest 版本
function ajax(opts) {
var xhr = new XMLHttpRequest(),
type = opts.type || 'GET',
url = opts.url,
params = opts.data,
dataType = opts.dataType || 'json';
type = type.toUpperCase();
if (type === 'GET') {
params = (function(obj){
var str = '';
for(var prop in obj){
str += prop + '=' + obj[prop] + '&'
}
str = str.slice(0, str.length - 1);
return str;
})(opts.data);
url += url.indexOf('?') === -1 ? '?' + params : '&' + params;
}
xhr.open(type, url);
if (opts.contentType) {
xhr.setRequestHeader('Content-type', opts.contentType);
}
xhr.send(params ? params : null);
//return promise
return new Promise(function (resolve, reject) {
//onload are executed just after the sync request is comple,
//please use 'onreadystatechange' if need support IE9-
xhr.onload = function () {
if (xhr.status === 200) {
var result;
try {
result = JSON.parse(xhr.response);
} catch (e) {
result = xhr.response;
}
resolve(result);
} else {
reject(xhr.response);
}
};
});
}
axios 版本
import axios from 'axios';
export default function API(options) {
return new Promise((resolve, reject) => {
axios({
method: options.method || 'GET',
url: options.url,
data: options.data,
headers: options.headers,
}).then(
d => {
let data = typeof d.data === 'string' ? JSON.parse(d.data) : d.data;
if (data.success === true) {
resolve(options.handleFn ? options.handleFn(data) : data);
} else {
let msg = data.message || data.msg;
reject(msg);
}
},
error => {
reject(error.message);
}
);
});
}
node 中使用 urllib
const urllib = require('urllib');
const _ = require('lodash');
export default function API(url, params) {
const defaultParams = {
method: 'GET',
dataType: 'json',
contentType: 'json',
data: {}
};
const response = await urllib.curl(url, _.merge({}, defaultParams, params));
}