JSONP实现原理。

如图:在发送ajax请求的时候,
设置dataType为jsonp,即告诉后台我需要返回的是script代码,而不是一个json格式的数据。
jsonp设置为callback2,这个就是前后台的协议,即后台返回的script的方法的名称,然后后台将原本的json放在该方法的参数中返回给前端
在发送jsonp请求的时候,会带一个_线的参数,这是请求的唯一标识,那浏览器就不会缓存该请求,设置cache:true就可以告诉浏览器该请求是可以被缓存的。
请求的参数如下

ajax跨域问题
1、产生跨域问题的原因
浏览器限制:出于安全考虑,浏览器设有同源策略,不允许跨域访问
(同源:协议,域名,端口三者均一致)
跨域:非同源的请求
请求类型为XHR(xmlHTTPRequst)
2、解决思路
浏览器禁止检查
JSONP(服务器后台需要做相应的改动 @ControllerAdvice)
跨域:被调用方、调用方
jsonp的后台配合
JSONP实现原理。

如图:在发送ajax请求的时候,
设置dataType为jsonp,即告诉后台我需要返回的是script代码,而不是一个json格式的数据。
jsonp设置为callback2,这个就是前后台的协议,即后台返回的script的方法的名称,然后后台将原本的json放在该方法的参数中返回给前端
在发送jsonp请求的时候,会带一个_线的参数,这是请求的唯一标识,那浏览器就不会缓存该请求,设置cache:true就可以告诉浏览器该请求是可以被缓存的。
请求的参数如下

php返回代码
echo $_GET['callback2'] .'('. json_encode(array('status' => true, 'msg'=> '请求成功!' )) .');';
jsonp实现原理:
前后台都需要做修改
(1) jquery动态创建一个script,使用script发送出去,不是xhr请求。
(2) 后台与前台约定使用相同的如callback函数,服务器返回的就会是javascript脚本,不是json。
jsonp除了callback还有一个_的函数,是防止缓存的。如果cache设置为true,就没有_函数了
JSONP请求被缓存前台设置
jsonp前端修改的时候