博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6手写jsop实现【promise】
阅读量:6706 次
发布时间:2019-06-25

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

一、jsonp跨域原理

一句话阐述下JSONP原理: 动态生成一个JavaScript标签,其src由接口url、请求参数、callback函数名拼接而成,利用js标签没有跨域限制的特性实现跨域请求。

二、jsonp的优缺点

  • 1、优点:兼容性好
  • 2、缺点:
    • 只支持get请求,不支持post(因为js标签本身就是一个get请求)
    • callback函数要绑定在window对象上
    • 需要后台配合:服务端返回数据有特定格式要求:callback函数名+'('+JSON.stringify(返回数据) +')'

三、代码

/* * @Author: laifeipeng * @Date: 2019-02-24 11:05:45 * @Last Modified by: laifeipeng * @Last Modified time: 2019-02-24 11:19:40 */function jsonp(url, data) {  return new Promise((resolve, reject) => {    // 1、初始化url    let dataString = url.indexOf('?') === -1 ? '?' : '&'    let callbackName = `jsonpCB_${
Date.now()}` url += `${dataString}callback=${callbackName}` if (data) { // 有请求参数,依次添加到url for (let k in data) { url += `&${k}=${data[k]}` } } // 2、动态生成js标签 let jsNode = document.createElement('script') jsNode.src = url // 3、触发callback,触发后删除js标签和绑定在window上的callback window[callbackName] = result => { delete window[callbackName] document.body.removeChild(jsNode) if (result) { resolve(result) } else { reject('没有返回数据') } } // 4、js加载异常的情况 jsNode.addEventListener('error', () => { delete window[callbackName] document.body.removeChild(jsNode) reject('JavaScript资源加载失败') }, false) // 5、添加js节点到document上时,开始请求 document.body.appendChild(jsNode) })}// 测试jsonp('http://127.0.0.1:3000/jsonp', { a: 1, b: 'heiheihei' }) .then(res => { console.log(res) }) .catch(err => { console.error(err) }) 复制代码

转载地址:http://zddlo.baihongyu.com/

你可能感兴趣的文章
让 linux 交互式命令行程序支持方向键等功能
查看>>
Linux 启动、关闭、重启网络服务
查看>>
[转载]定制CentOS 6.3 自动安装盘
查看>>
js生成动态的飘过效果
查看>>
Java进阶05 多线程
查看>>
SQLSERVER性能监控级别步骤
查看>>
Java使用ScriptEngine(javax.script)
查看>>
Nhibernate中 Many-To-One 中lazy="proxy" 延迟不起作用的原因
查看>>
C# COM Object for Use In JavaScript / HTML, Including Event Handling
查看>>
svn权限设置
查看>>
MVC验证11-对复杂类型使用jQuery异步验证
查看>>
C++static关键字用法
查看>>
excel在msdn上的说明文档
查看>>
指尖下的js ——多触式web前端开发之一:对于Touch的处理(转)
查看>>
visual studio 2013使用技巧
查看>>
Sublime Text 相关
查看>>
深入理解css优先级
查看>>
Android MediaPlayer状态机
查看>>
Material Design Animation
查看>>
ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
查看>>