因为不想让再引用新的第三方组件了,所以执念了一下,于是搜索到了下面的代码

//axios本版本不支持jsonp 自己拓展一个
axios.jsonp = (url) => {if(!url){console.error('Axios.JSONP 至少需要一个url参数!')return;}return new Promise((resolve,reject) => {window.jsonCallBack =(result) => {resolve(result)}var JSONP=document.createElement("script");JSONP.type="text/javascript";JSONP.src=`${url}&callback=jsonCallBack`;document.getElementsByTagName("head")[0].appendChild(JSONP);setTimeout(() => {document.getElementsByTagName("head")[0].removeChild(JSONP)},500)})
}

调试了一下,发现确实能用,但是存在一个缺陷,就是如果存在连续多次的请求,都会回调到同一个函数上,这样会导致获取异步结果的时候只返回了最后一次的结果,于是乎调整了一下函数,保证每次都是命中自己对应的方法,写的比较简单,因为我的 index 不会重复,所以我没做其他校验了,如果需要保证请求的唯一性,请将 index 参数设置为唯一值(比如 时间戳 + 3位的随机数)

import axios from 'axios'
import es6Promise from 'es6-promise'// HH: 扩展 axios,让 axios 支持 jsonp
axios.jsonp = (url, index) => {if (!url) {console.error('Axios.JSONP 至少需要一个url参数!')return;}let callbackName = 'jsonCallBack' + index;return new Promise((resolve, reject) => {let JSONP = document.createElement("script");JSONP.type = "text/javascript";JSONP.src = `${url}&jsonpCall=${callbackName}`;document.getElementsByTagName("head")[0].appendChild(JSONP);window[callbackName] = (res) => {resolve(res)}setTimeout(() => {document.getElementsByTagName("head")[0].removeChild(JSONP)}, 500)})
}export const jsonp = (url, index) => axios.jsonp(url, index)

转载于:https://my.oschina.net/u/943746/blog/3074454

【HAVENT原创】让 axios 支持 jsonp相关推荐

  1. Spring MVC 4.1 支持jsonp

    2019独角兽企业重金招聘Python工程师标准>>> 使用ResponseBodyAdvice支持jsonp ResponseBodyAdvice是一个接口,接口描述, packa ...

  2. 【springboot】【若依(ruoyi)】@RestController 接口支持 JSONP

    前言 若依(ruoyi): v4.3 springboot 2.1.1.RELEASE spring 5.1.3.RELEASE 360极速浏览器 12.0.1476.0 (正式版本) (32 位) ...

  3. AJAX、axios、JSONP、CORS

    部分借鉴至:博客园-Mr_慕白 => HTTP报文格式 部分借鉴至:CSDN-HansExploration => JSONP原理详解 参考:阮一峰 浏览器同源政策及其规避方法 参考:阮一 ...

  4. 【HAVENT原创】Node Express API 通用配置

    为什么80%的码农都做不了架构师?>>>    ( 基于 Express 4.x ) 启动文件 /app.js: var express = require('express'); ...

  5. 部署ajax服务-支持jsonp

    server端代码 var http = require("http"); var url = require('url'); //访问地址:http://127.0.0.1:40 ...

  6. ashx 跨域_ASP.NET通用HTTP处理程序(ashx的),支持JSONP

    Can someone show an example of an HTTP Handler that returns JSON and supports cross domain calls. I ...

  7. 【HAVENT原创】Australian Business Number (ABN) 验证

    为什么80%的码农都做不了架构师?>>>    PHP 代码如下: // ValidateABN // Checks ABN for validity using the publi ...

  8. 【HAVENT原创】Firebase 定时任务遍历删除子节点

    为什么80%的码农都做不了架构师?>>>    每周定时执行,遍历 Firebase 数据库,删除过期的节点: var config = require('./config.json ...

  9. 【HAVENT原创】JS 屏蔽/禁止双击选中文字

    为什么80%的码农都做不了架构师?>>>    源码如下: <div onselectstart="return false;" ><span& ...

  10. 由【说说JSON和JSONP..】博文,想到的MVC 扩展

    前言 今天看到随它去吧大牛的 [原创]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 文章,利用JSONP的跨域令人倍感狂喜.于是想,自己动手针对Asp.net MVC 进行一些扩展, ...

最新文章

  1. idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
  2. Windows+Nginx+IIS做图片分布式存储详细步骤
  3. 项目交接文档_财务离职,交接工作需要交接哪些?附财务移交清册表!
  4. C++中派生类隐式调用与显式调用基类的构造函数
  5. 上海民警这个方法让汽车提前“助跑”,路口通行效率提10%
  6. com.android.tools.build:gradle:2.3.3,关于com.android.tools.build:gradle:3.4.2的构建问题
  7. java tcp发消息给硬件_服务器可以使用TCP向客户端发送消息吗?
  8. 2021年中国住宅保安系统市场趋势报告、技术动态创新及2027年市场预测
  9. ws550 第三方固件_华为WS550路由器如何固件升级
  10. Python语言程序设计前言
  11. history linux 位置,Linux基础知识之history的详细说明
  12. 计算机课程总结word,大学生的计算机课程总结word.docx
  13. ODI升级连接mysql数据库的驱动
  14. 我们过度解读了鲁迅了么?
  15. 计算机网络习题:第三单元
  16. 全局vue中修改字体样式 苹方字体 微软雅黑 亲测可用
  17. 【数字IC基础】IC(Integrated Circuit,集成电路)常用缩写
  18. 什么是SOA?什么是ESB?及其在银行业中是如何发展的?
  19. TCL电子2019上半年电视机销量稳居全球第二
  20. Android Notification 没有声音 没有震动 的情况

热门文章

  1. App 抓包工具一(Charles)
  2. Linux下套接字详解(十)---epoll模式下的IO多路复用服务器
  3. html颜色渐变配色方案,css网站推荐 渐变色配色方案 - 小俊学习网
  4. 如何提高思考能力,(一个绝对能帮到你的科普)取自《思维混乱:是因为大脑没有结构》谢春霖
  5. 《网络攻防》实验九:web安全基础实践
  6. 农业银行计算机类笔试题库,中国农业银行笔试题库含答案
  7. phpstudy升级mysql5.6_phpstudy升级mysql数据库
  8. 报告丨前瞻产业研究院:2019年中国大数据行业研究报告
  9. 2022年,美股将要上市的巨头能否逃过破发命运?
  10. 历史_美股和美债的联动关系