ajax jsonp用法,使用JSONP解决ajax跨域

1460000012750633?w=800&h=533

在日常开发中,不免遇到跨域的问题。在这里我们介绍使用Jsonp来解决ajax跨域的问题

什么是跨域?

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。简单的理解就是开发时当客户端所在的工程与服务端的ip不同或者端口不同时进行请求,就产生了跨域,进而不能请求数据。

什么是JSONP?

官方的说法是:JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

我们都知道,JSON是一种数据交换格式。而JSONP是一种的数据调用方式。它利用标签可以跨域的特性,将需要跨域获取的数据包在标签中来达到目的。当我们需要使用JSONP时,客户端调用服务端时传递一个callback,这样服务端根据callback的有无就可以判断是否需要使用JSONP。可以简单的理解为带callback的json就是jsonp。

JSONP的使用

AJAX的使用与平常无异,只需要将dataType改为jsonp即可

$.ajax({

url : url,

dataType : "jsonp",

type : "GET",

success : function(data){

...

}

});

服务端接收到以后,只需要手动判断一下有无callback再手动拼一对括号即可,这里以java为例

@ResponseBody

@RequestMapping(value="xxx")

public String testJsonp(String callback) {

Student result = new Student();

//响应结果之前,判断是否为jsonp请求

if (StringUtils.isNotBlank(callback)) {

//把结果封装成一个js语句响应

return callback + "(" + JsonUtils.objectToJson(result) + ");";

}

return JsonUtils.objectToJson(result);

}

在Spring 4.1以上的版本也可以使用MappingJacksonValue来响应

@ResponseBody

@RequestMapping(value="xxx")

public Object testJsonp(String callback) {

Student result = new Student();

//响应结果之前,判断是否为jsonp请求

if (StringUtils.isNotBlank(callback)) {

//把结果封装成一个js语句响应

MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);

mappingJacksonValue.setJsonpFunction(callback);

return mappingJacksonValue;

}

return result;

}

怎么样,简单几步就可以跨域来访问服务端了。

本文作者: catalinaLi

本文链接: http://catalinali.top/2018/us...

版权声明: 原创文章,有问题请评论中留言。非商业转载请注明作者及出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值