跨域方法(2)-jsonp跨域
2018-12-12 本文已影响0人
牛奶大泡芙
jsonp是跨域方法的一种,就是json pending,即对json的补充。
jsonp是一种特殊的协议,前后台约定了get方法的参数,默认callback,后台会把原本的json对象换成js代码,返回给前端,js代码中的函数是callback对应参数,js代码中的参数是后台json数据
jsonp虽然是利用script标签的src属性,不受浏览器同源策略的检查,但是仍然需要后台的配合
比如在java spring框架中,后台需要对callback参数名进行规定
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice
public JsonpAdvice() {
super("callback"); // 意味着前端get请求参数是“callback”
}
比如ajax自动生成的script标签
$.ajax ({
url: base + '/get',
jsonp: 'callback',
dataType: 'jsonp',
success: function(json) {
}
})
发出这个jsonp请求之后,html会在head中插入一个script标签
<script async src="http://localhost:8080/get?callback=jquery123&_=123"></script>
jsonp的弊端是
1、请求的类型不是xhr,而是script
2、仅支持get请求
3、后台要相应修改,支持callback参数