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代码,浏览器接收并执行。
接口返回内容:

JSONP也有缺点:
- 只支持GET请求
- 不方便失败处理
- 安全性问题(XSS,脚本攻击)