UNPKG

@gdjiami/jslib

Version:

Jiami FrontEnd helpers and Services

143 lines (128 loc) 3.5 kB
import _regeneratorRuntime from "@babel/runtime/regenerator"; import _extends from "@babel/runtime/helpers/esm/extends"; /** * 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) { var _extends2; var finalOptions, prefix, finalParams, finalUrl, target, script; return _regeneratorRuntime.async(function jsonp$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (options === void 0) { options = {}; } finalOptions = _extends({ callback: 'callback', timeout: 10000 }, options); prefix = JSONP_PREFIX + "_" + getUid(); finalParams = _extends((_extends2 = {}, _extends2[finalOptions.callback] = prefix, _extends2), params); finalUrl = appendQuery(url, finalParams); target = document.getElementsByTagName('script')[0] || document.head; script = document.createElement('script'); script.src = finalUrl; return _context.abrupt("return", new Promise(function (res, rej) { var resolved = false; var timer; var cleanup = function cleanup() { 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); })); case 9: case "end": return _context.stop(); } } }); } /** * 获取地址参数 * @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); }