JSONP 工作原理

219 阅读1分钟

一、原理

  就是利用 <script> 标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本生成一个回调方法,并创建一个 <script> 元素,地址指向第三方的API网址,参数上带上回调方法名。
形如:

<script>
	//jsonp回调方法
	function testjson(txt){
		alert(txt);
	}
</script>
<script src ="http://localhost/api?callback=testjson" type="text/javascript" ></script>

  第三方服务器端产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
@GetMapping("/api")
@ResponseBody
public String testJsonp(String callback){
	// 返回接收到的 回调函数名(json格式的数据)
	return callback + "('{"name":"hax","gender":"Male"}');";
}

这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

** 根据jsonp的工作原理,显而易见,它只能解决 GET 的跨域请求,而且也只是利用设计 “漏洞” 实现的跨域方式,现如今 CORS (跨域资源共享 Cross-Origin-Resource-Sharing)是一个比较好的解决方案。 **