现如今,实现跨域数据请求,最主要的两种解决方案,分别是 JSONP
和 CORS
。
JSONP
:出现的早,兼容性好(兼容低版本IE)。是前端程序员为了解决跨域问题,被迫想出来的一种临时解决方案。缺点是只支持 GET
请求,不支持 POST
请求。
CORS
:出现的较晚,它是 W3C
标准,属于跨域 Ajax
请求的根本解决方案。支持 GET
和 POST
请求。缺点是不兼容某些低版本的浏览器
实现一个简单的JSONP
<scripit>function success(data){console.log('获得了data数据:');console.log(data)}</script>
<script src='http://~~~?callback=success&name=zs&age=20'></script>
JSONP
的缺点
由于 JSONP
是通过 <script>
标签的 src
属性,来实现跨域数据获取的,所以,JSONP
只支持 GET
数据请求,不支持 POST 请求。
注意: JSONP
和 Ajax 之间没有任何关系,不能把 JSONP
请求数据的方式叫做 Ajax,因为 JSONP
没有用到
XMLHttpRequest
这个对象
jQuery中的JSONP
$.ajax({
url:'http://~~~?callback=success&name=zs&age=20'
// 如果要使用 $.ajax() 发起 JSONP 请求,必须指定 datatype 为 jsonp
dataType: 'jsonp',
success: function(res) {
console.log(res)
}
})
自定义参数及回调函数名称
默认情况下,使用 jQuery
发起 JSONP
请求,会自动携带一个 callback=jQueryxxx
的参数,jQueryxxx
是随机生成的一个回调函数名称
在使用 jQuery
发起 JSONP
请求时,如果想要自定义 JSONP
的参数以及回调函数名称,可以通过如下两个参数来指定:
$.ajax({
url: 'http://ajax.frontend.itheima.net:3006/api/jsonp?name=zs&age=20',
dataType: 'jsonp',
// 发送到服务端的参数名称,默认值为 callback
jsonp: 'callback',
// 自定义的回调函数名称,默认值为 jQueryxxx 格式
jsonpCallback: 'abc',
success: function(res) {
console.log(res)
}
})
扩:
总结防抖和节流的区别
-
防抖:如果事件被频繁触发,防抖能保证只有最有一次触发生效!前面 N 多次的触发都会被忽略!
-
节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性地执行一部分事件!