Codog

关注微信公众号:Codog代码狗

0%

JSONP工作原理

JSONP经常被用来解决跨域问题,浏览器对JS的请求有同源策略,但对script标签却没有,利用这点可以达到跨域的目的。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
<body>
<div id="content"></div>
<script>
function processJSON(data) {
const { title, modified } = data
document.querySelector('#content').innerText = JSON.stringify({ title, modified })
}

const script = document.createElement('script')
script.src = "https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=processJSON&tags=monkey&tagmode=any&format=json"
document.body.appendChild(script)
</script>
</body>

我们首先定义了processJSON方法,然后将这个方法名当作参数传给服务端用来数据,服务端将我们的方法名和实际数据拼接,返回js代码,浏览器接收并执行。

接口返回内容:

image

JSONP也有缺点:

  • 只支持GET请求
  • 不方便失败处理
  • 安全性问题(XSS,脚本攻击)