博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp
阅读量:6245 次
发布时间:2019-06-22

本文共 1992 字,大约阅读时间需要 6 分钟。

import { NetWorkError } from '../common/errors.js'let jsonpId = 1;export function jsonpCallbackId() {    return jsonpId ++;}export function jsonpRequest(url, params) {    let pStr;    let reqUrl = url + '?' + '_=' + Date.now() + ((pStr = param2String(params)) ? '&' + pStr : '');    return sendJsonp(reqUrl);}// 将键数据转换成get请求的参数形式function param2String(params) {    if (typeof params === 'string') {        return params;    }    return objectToParamString(params);}// 将对象转换成键值对形式,只支持单层function objectToParamString(params) {    let ret = '';    for (let key in params) {        ret = ret + key + '=' + encodeURIComponent(params[key]) + '&';    }    ret = ret.substr(0, ret.length-1); // 去除最后的'&'    return ret;}function sendJsonp(reqUrl) {    return new Promise((resolve, reject)=>{        let callbackName = 'jsonp_cb_' + jsonpCallbackId();        let script = document.createElement('script');        let respData = null;        let isTimeout = false;        let timeout = setTimeout(()=>{            isTimeout = true;            reject(new NetWorkError('timeout'));        }, 5000);        let loadCallback = ()=>{            clearTimeout(timeout);            if(!isTimeout) {                respData ? resolve(respData) : reject(new NetWorkError('error'));            }            delete window[callbackName];            script.removeEventListener('load', loadCallback);            script.removeEventListener('error', loadCallback);            document.head.removeChild(script);        }        script.addEventListener('load',loadCallback);        script.addEventListener('error', loadCallback);            window[callbackName] = function(resp){            respData = resp;        }        script.src = reqUrl + '&callback=' + callbackName;        document.head.appendChild(script);    });}

 

 

errors.js

export class NetWorkError extends Error {    constructor(message) {        super(message)            this.errorType = 'NetWorkError'    }}

 

转载于:https://www.cnblogs.com/yhquan/p/11118716.html

你可能感兴趣的文章
SDS(Simple Dynamic String)一个简易动态字符串库
查看>>
swfit-pod使用
查看>>
(九)easyUI之选项卡
查看>>
日志分析工具ELK(三)
查看>>
PAT (Advanced Level) 1049. Counting Ones (30)
查看>>
HDU 5763 Another Meaning
查看>>
session详解
查看>>
scroll滚动条
查看>>
mysql链接超时错误
查看>>
Win10 安装 Linux子系统 Ubuntu18.04 / Kali Linux 的体验
查看>>
才发现用git Gui也能上传项目到gitHub,下面分享一下经验
查看>>
P1462 通往奥格瑞玛的道路
查看>>
关于ajax
查看>>
一份关于jvm内存调优及原理的学习笔记
查看>>
怎么查看80端口占用情况- 如何查看端口占用情况?
查看>>
搭建测试框架
查看>>
position:absolute在IE8浏览器下无法显示正确位置
查看>>
过滤器与拦截器区别
查看>>
C# 使用 Windows API 发送文件到打印机
查看>>
NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
查看>>