场景:web前端在获取一些基础数据(比如:地区数据、行业、学历、专业,各种分类、属性等等)时,通过服务器一次拉取所有基础数据json压缩包。优点:一可以减少流量,二可以减少很多http请求 …
该例需要浏览器localStorage来存储以上解压后的大量数据,同时,需要XMLHTTPRequest2支持请求二进制数据流,故ie低版本浏览器不适用…
# 方法代码
/**
* XMLHttpRequest2
*/
ajax2 = function (opts) {
var XHR = new XMLHttpRequest();
XHR.open(opts.type || 'GET', opts.url, true);
XHR.responseType = opts.dataType || 'arraybuffer';
XHR.onload = function(e) {
opts.success && opts.success(this.response);
};
XHR.onerror = function (err) {
opts.error && opts.error(err);
}
XHR.send();
};
/**
* 解压zlib数据
* @param url 数据包url地址
* @param callback 数据包获取完成回调函数
*/
getZlibBasicData = function (url, callback) {
// 成功处理
function successHandler(data) {
data = new Uint8Array(data);
console.log(data);
try {
var result = JSON.parse(pako.inflate(data, { to: 'string' }));
callback && callback({
code: 0,
msg: 'Success',
data: result
});
} catch (e) {
callback && callback({
code: 2,
msg: e,
data: data,
url: url
});
}
};
// 错误处理
function errorHandle(err) {
callback && callback({
code: 1,
msg: 'ERROR: getZlibXmqData() Ajax2 ...',
data: err
});
};
// 请求数据
ajax2({
url: url,
// dataType: 'arraybuffer',
// type: 'GET',
success: successHandler,
error: errorHandle
});
};
# 使用
// 数据包地址
var url = 'http://config-1253933147.file.myqcloud.com/app/xmq_data20170927344.zip';
// 获取数据包json内容
getZlibBasicData(url, function (res) {
console.log(res);
});
pako 的使用我未深究,需要的同学可以去git阅读详情。
pako 源码:https://github.com/nodeca/pako