ajax三剑客,TypeScript版Ajax包括json、jsonp、post等请求

这个博客介绍了如何使用TypeScript编写一个Ajax库,支持json、jsonp和post请求,利用Promise和async/await解决回调问题。库包含对象遍历、类型检查、对象转query字符串等功能,并提供了jsonp的实现,支持超时和错误处理。示例展示了如何在实际项目中使用该库进行异步请求。
摘要由CSDN通过智能技术生成

TypeScript版Ajax包括json、jsonp、post等请求,使用Promise 对象返回结果,支持async/await解决回调地狱,书写更舒适。const hasOwnProperty = Object.prototype.hasOwnProperty;

interface EachObject {

[ key: string ]: any,

readonly length?: number,

}

function forEach(

obj: EachObject,

iterator: (value?: any, key?: number | string, obj?: EachObject) => boolean | void,

context?: Object

) {

if (!obj) {

return;

}

if (obj.length && obj.length === +obj.length) {

for (let i = 0; i < obj.length; i++) {

if (iterator.call(context, obj[i], i, obj) === true) return;

}

} else {

for (const k in obj) {

if (hasOwnProperty.call(obj, k)) {

if (iterator.call(context, obj[k], k, obj) === true) return;

}

}

}

}

const Types: {

[key: string]: (obj: Object) => boolean;

} = {};

const _toString: () => string = Object.prototype.toString;

forEach([

'Array',

'Boolean',

'Function',

'Object',

'String',

'Number',

], (name: number) => {

Types[`is${name}`] = function (obj: Object) {

return _toString.call(obj) === `[object ${name}]`;

}

});

// Object to queryString

function serialize(obj: EachObject): string {

const q: string[] = [];

forEach(obj, (val, key) => {

if (Types.isArray(val)) {

forEach(val, (v, i) => {

q.push(`${key}=${encodeURIComponent(v)}`);

});

} else {

q.push(`${key}=${encodeURIComponent(val)}`);

}

});

return q.join('&');

}

function parseJSON(str: string): Object {

try {

return JSON.parse(str);

} catch (e) {

try {

return (new Function(`return ${str}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值