JSONP的跨域请求
来源:互联网 发布:工程造价软件广联达 编辑:程序博客网 时间:2024/05/16 16:23
jsonp的跨域请求:
JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写。
JSONP实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的src 不受同源策略约束来跨域获取数据。
JSONP 由两部分组成:回调函数(callback)和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的 JSON 数据。
注意:
Jsonp是浏览器行为:(浏览器拦截不同域的json数据)
jsonp可以异步的下载内容,获取js中的内容。
Callback是jQuery中jsonp需要的参数,有jQuery提供。
前端html和js:
<div class="input-big js-tip" id="js-codeinput">
<label class="leftfont"><i class="fcred-3">*</i> 验证码</label>
<input type="text" class="text w95" id="js-phoneCode" name="vcode" maxlength="4" placeholder="请输入验证码" data-vtype="must|fun" data-vfun="validVCode" data-vmsg="请输入验证码|验证码错误">
<a href="javascript:void(0);" id="js-phoneCodeImg" onclick="$('img',this).attr('src', 'http://localhost:10000/code/getPicCode.action?v=' + (new Date()).getTime())">
<img src="http://localhost:10000/code/getPicCode.action" width="85" height="31">
</a>
</div>
/* 获取手机号验证码 */
$("#js-phoneCodeBtn").click(function(){
//获取输入的手机号
var phonenum = $("#phone").val();
//需要判断手机号是否符合规范
$.ajax({
url:"http://localhost:10000/code/getPhoneCode.action",
data:"phonenum"+phonenum,
dataType:'jsonp',
success:function(data){
alert(data);
}
});
//发起请求,传递手机号获取验证码的接口
//获取返回的数据
});
后台方法:
/**
* 获取手机验证码
* */
@RequestMapping(value="/getPhoneCode",produces= {"text/plain;charset=utf-8"})
@ResponseBody
public String getPhoneCode(String phonenum,String callback) {
//创建验证码
ValidateCode validateCode = new ValidateCode(140, 40, 4, 20);
String code = validateCode.getCode();//获取图片内容
//把验证码缓存
Jedis jedis = jedisInterface.getJedis();
jedisInterface.set(phonenum, code, jedis);
jedisInterface.close(jedis);
String result = callback==null? "验证码是"+code:callback+"('"+"验证码是"+code+"')";
return result;
}
SONP目前还是比较流行的跨域方式,虽然JSONP使用起来方便,但是也存在一些问题:
首先, JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己运维的 Web 服务时,一定得保证它安全可靠。
其次,要确定 JSONP 请求是否失败并不容易。虽然 HTML5 给<script>元素新增了一个 onerror事件处理程序,但目前还没有得到任何浏览器支持。为此,开发人员不得不使用计时器检测指定时间内是否接收到了响应。
- JSONP的跨域请求
- jsonp跨域请求
- jsonp 跨域请求
- jsonp跨域请求
- jsonp跨域请求
- jsonp跨域请求
- jsonp跨域请求
- JSONP 跨域请求
- jsonp跨域请求
- jsonp跨域请求
- JSONP跨域请求
- JsonP跨域请求
- jsonp跨域请求
- 跨域请求jsonp
- jsonp跨域请求
- JsonP跨域请求
- 跨域请求jsonp
- jsonp 跨域请求
- POJ-2456 Aggressive cows
- 转载--spring配置文件详解
- 侧拉 DrawerLayout 懵!
- 极其stupid的期中考试
- Hdu 5792 World is Exploding
- JSONP的跨域请求
- unity用于android上的旋转缩放脚本
- hibernate_商城关系表的建立
- 二分查找
- Android开发自定义圆角带点击效果的Button
- 习题6.15
- 【图像处理】反走样技术
- 一些感想
- HDU 4686 Arc of Dream