@gdjiami/jslib
Version:
Jiami FrontEnd helpers and Services
116 lines (115 loc) • 3.52 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* HTTP 请求相关函数
*/
import qs from 'qs';
import { getUid } from './number';
import { noop } from './function';
var JSONP_PREFIX = '__jp';
/**
* 解析查询字符串
*
* @example
* ```js
* getSearch('?id=1&name=a')
* ```
*
* @param search 查询字符串
*
* @returns 格式化后对象
*/
export function getSearch(search) {
search = search.startsWith('?') ? search.slice(1) : search;
return qs.parse(search);
}
/**
* 格式化对象为查询字符串, 不包含‘?’前缀
*
* @example
* ```js
* searchStringify({id: 1, name: 'a'})
* ```
*
* @param obj 格式化对象
*
* @returns 格式化后字符串
*/
export function searchStringify(obj) {
return qs.stringify(obj);
}
/**
* 追加查询字符串到url上
*
* @example
* ```js
* appendQuery('xxx.html?id=1', { name: 'a' })
* ```
*
* @returns 追加后的 url
*/
export function appendQuery(url, obj) {
var params = searchStringify(obj);
return url + (url.indexOf('?') === -1 ? '?' : '&') + params;
}
/**
* JSONP 请求
* @param url 请求地址
* @param params 请求参数
* @param options 设置,可配置回调函数及超时时间
*/
export function jsonp(url, params, options) {
if (options === void 0) { options = {}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, finalOptions, prefix, finalParams, finalUrl, target, script;
return tslib_1.__generator(this, function (_b) {
finalOptions = tslib_1.__assign({ callback: 'callback', timeout: 10000 }, options);
prefix = JSONP_PREFIX + "_" + getUid();
finalParams = tslib_1.__assign((_a = {}, _a[finalOptions.callback] = prefix, _a), params);
finalUrl = appendQuery(url, finalParams);
target = document.getElementsByTagName('script')[0] || document.head;
script = document.createElement('script');
script.src = finalUrl;
return [2 /*return*/, new Promise(function (res, rej) {
var resolved = false;
var timer;
var cleanup = function () {
if (resolved) {
return;
}
resolved = true;
clearTimeout(timer);
if (script.parentNode) {
script.parentNode.removeChild(script);
window[prefix] = noop;
}
};
timer = window.setTimeout(function () {
cleanup();
rej(new Error('请求超时'));
}, finalOptions.timeout);
window[prefix] = function (data) {
cleanup();
res(data);
};
target.parentNode.insertBefore(script, target);
})];
});
});
}
/**
* 获取地址参数
* @param key 参数 key 值
*
* @example
*
* ```js
* window.location.href = 'http://xxx.html?id=007&name=test'
* getUrlParam(id) // => '007'
* getUrlParam(name) // => 'test'
* getUrlParam(age) // => null
* ```
*/
export function getUrlParam(key) {
var urlStatus = new URLSearchParams(location.hash.split('?')[1]);
return urlStatus.get(key);
}