解决的问题
由于javascript出于安全限制–同源策略(Same-Origin Policy),禁止访问当前项目之外的数据,jsonp正是解决这一问题。
jsonp使用ajax实现,但是区别与ajax,dataType为jsonp,同时增加了callback。
具体实现
- html
//当前项目为test1.com,请求的数据在项目test2.com中
$.ajax({
url:'http://test2.com/api/user',
async:false,
type:'get',
data:{name:'hzj'},
dataType: 'jsonp',
jsonp: 'callback',
success:function (res) {
console.log(res);
}
})
- 跨域请求目标数据
//项目2
public function index(Request $request)
{
$callback = $request->input('callback');
$data = [
[
'code'=>0,
'data'=>[1,2,3,4,5]]
];
//方法1:
return response()->jsonp($callback, $data);
//方法2:
return response()->json($data)->setCallback($callback);
}
http://test2.com/api/user?callback=jQuery34103846720693359047_1581261009503&name=hzj&_=1581261009504
其中callback是客户端注册的回调方法;
- 响应结果:
jQuery34103846720693359047_1581261009503([{“code”:0,“data”:[1,2,3,4,5]}]);
成功获取到数据