关于JSONP的用法

JSONP是跨域请求的一种解决方案

为什么会出现跨域的问题?
在为了保护浏览器和用户的安全,浏览器不允许对不同域名的不同端口进行ajax访问
及只能对同域名下的同一端口资源进行访问
jsonp实现的背景
在开发中我发现,浏览器允许不同域名之间访问javaScript文件,我们可以将数据伪装成js文件来进行传输,利用这一特点可实现不同web应用之间的数据跨域问题。
jsonp数据传输的格式
设置响应头:content-type: application/javascript
传输的数据格式为:函数名(数据)
jsonp的使用——js写法

$.ajax({ 
 url:'http://localhost/testJsonp',//这里写需要跨域访问的地址
 type:'post', //这里是访问方式
 dataType:'jsonp', //声明返回值类型为jsonp格式
 jsonpCallback:'callback',//传递给服务端的参数值,一般写回调的函数名,可以不写jquery会传递默认值
 jsonp:'callback',//传递给服务端的参数名,默认为"callback",
 success:function(data){   //匿名函数,写这个匿名函数上面的callback函数名回调就不会生效
    alert(data); 
    } 
});

服务端写法

@RequestMapping("/testJsonp") 
@ResponseBody 
public MappingJacksonValue demo(String callback){ 
	People p = new People(); 
	p.setId(1);
	p.setName("张三");
  //把构造方法参数转换为 json 字符串并当作最终返回值函数 的参数
	MappingJacksonValue mjv = new MappingJacksonValue(p);
  //最终返回结果中函数名 
	mjv.setJsonpFunction(callback); 
	return mjv; 
   } 
}

其实简单点可以使用字符串拼接的方式

@RequestMapping("/testJsonp") 
@ResponseBody 
public String demo(String callback){
	//获取前段传进来的callback参数作为回调函数名返回 
	return callback+"(数据)";
   } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值