[手写系列]手写一个JSONP

28 篇文章 0 订阅
2 篇文章 0 订阅

写一个JSONP

好久没写了,现在觉得还挺简单的…
原理就是服务器返回告诉浏览器运行预先设置好的函数啊,一个是你让浏览器执行函数,一个是你告诉服务器再告诉浏览器执行函数,没啥区别.

思路

因为浏览器不能跨域,但是不禁止script标签加载不同源的网站,script标签随便加载.那么就可以用script发送不同源的ajax请求

测试

先用node写一个服务器,端口8888监听请求

写了肯定没人看,还是截图直观,一看就懂
在这里插入图片描述

terminal node执行,测试成功开启

好了现在随便找个能写script的页面测试下

在这里插入图片描述

上面的写法只是展示我理解的jsonp的原理

真正项目中这么写太麻烦了,也不美观,所以直接封装成一个函数,就方便很多了

这么写

封装就有点抽象了,思路:

  • 设置一个函数,形参是url(你的请求)和get请求的值比如天气api的地址什么的
  • 因为是网络请求,最好是异步,这样直接用promise就好
  • 要在全局设置一个函数,函数怎么执行写promise的resolve方法里
  • 生成src,添加到script标签里发送请求,再把script标签删掉
function jsonp(url) {
  return new Promise((resolve, reject) => {
    window._fn = data => resolve(data)
    let script = document.createElement('script')
    script.src = url + '?callback=_fn'
    script.onerror = () => reject('加载失败')
    document.head.appendChild(script)
    document.head.removeChild(script)
  })
}

点击按钮成功发送请求得到数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值