手机版

Spring 4.1 JSONP的使用指南

时间:2021-11-02 来源:互联网 编辑:宝哥软件园 浏览:

JSONP就是为了解决这一问题的,JSONP是英文带填充的数据的缩写,是一个非官方的协议。他允许服务端生成脚本标签返回值客户端,通过java描述语言回调的形式来实现站点访问JSONP。是一种脚本标签的注入,将计算机网络服务器返回的反应添加到页面是实现特定功能。

简而言之,JSONP本身不是复杂的东西,就是通过scirpt标签对爪哇岛描述语言文档的动态解析绕过了浏览器的同源策略。

如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构

那么在页面上不同的服务调用不同域名下的数据是有问题的

(跨域:不同域名,相同域名但是不同端口)

Java脚本语言规范中提到的数据是不能直接跨域调用,为了安全,但是能调用射流研究…片段

所以把数据包装为一个射流研究…片段,也就是跨域请求那么就能够跨域请求

在spring4.1后,提供了新的方法可以作为跨域请求的调用

例:

@请求映射(值='/列表')@响应体公共对象getitemccatlist(字符串回调){ itemcateresult=itemccatservice。getitemcatlist();if (StringUtils.isBlank(回调)){ //需要把结果转换成字符串返回结果;} //如果字符串不为空,需要支持跨域请求调用spring4.1以上可用映射杰克逊值映射杰克逊值=新映射杰克逊值(结果);mappingjacksonvalue。setjsonfunction(回调);返回mappingJacksonValue}如图,这就是跨域请求

那么只要在射流研究…需要调用跨域请求的地方稍加处理就能够跨域调用数据了~

做了个例子,用来在页面上展示jsonp:

(js写的丑了点,本人后端出生,前端大侠们轻拍~)

var Menu=function(){ return { getmenudata : function(JSON){ console。日志(JSON);var数据=JSON . datavar html=for(var I=0;一。数据。长度;i ) { var url=data[i].u;var name=data[i].n;var sub=数据[i].我;html=html='li class='下拉菜单-子菜单"";html=' a href=' ' url ' '名称;html=' span class=' c-arrow c-toggler '/span ';html='/a ';html='ul类='下拉菜单c-拉-右;for(var j=0;j长度;j ) { var url=sub[j].u;var name=sub[j].n;var节点=sub[j].我;html='li类='下拉菜单-子菜单"";html=' a href=' ' url ' '名称;html=' span class=' c-arrow c-toggler '/span ';html='/a ';html='ul类='下拉菜单c-拉-右;for(var k=0;k节点长度;k ) {//调试器var name=node[k];var last=name。拆分(' | ');html=' lihtml=' a href=' last[0]' ' ' last[1]'/a ';html='/Li ';} html='/ul ';html='/Li ';} html='/ul ';html='/Li ';} $('#itemCatMenu ').html(html);},getJSONP:函数(serverUrl,callbackFun) { $ .ajax({ type: 'get ',url: serverUrl,dataType: 'jsonp ',jsonp: 'callback ',jsonpCallback: callbackFun,success:函数(JSON){//控制台。日志(JSON);},错误:函数{ if (e.status!=' 200 '){控制台。日志(e);} } });} };}();$(文档)。ready(function(){ var serverUrl=' http://localhost :8088/rest/menu/list ';Menu.getJSONP(serverUrl,' Menu。getmenudata’);});展示的效果:

版权声明:Spring 4.1 JSONP的使用指南是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。