UNPKG

@gdjiami/jslib

Version:

Jiami FrontEnd helpers and Services

116 lines (115 loc) 3.52 kB
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); }