JSON

Spring 4.1+JSONP的使用指南

字号+ 作者:H5之家 来源:H5之家 2016-05-02 17:00 我要评论( )

IT学习网是国内以普及电脑技术的学习资料网站,本站历经长期发展已深得广大电脑爱好者的好评和喜爱,为您提供从基础到高端的信息技术学习平台,我们也努力将IT学习

JSONP就是为了解决这一问题的,JSONP是英文JSON with Padding的缩写,是一个非官方的协议。他允许服务端生成script tags返回值客户端,通过javascript callback的形式来实现站点访问。JSONP是一种script tag的注入,将server返回的response添加到页面是实现特定功能。

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

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

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

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

JavaScript规范中提到的json是不能直接跨域调用,为了安全,但是能调用js片段

所以把json包装为一个js片段,也就是jsonp那么就能够跨域请求

在spring4.1后,提供了新的方法可以作为jsonp的调用

例:

@RequestMapping(value="/list") @ResponseBody public Object getItemCatList(String callback) { ItemCatResult result = itemCatService.getItemCatList(); if (StringUtils.isBlank(callback)) { //需要把result转换成字符串 return result; } //如果字符串不为空,需要支持jsonp调用 spring4.1 以上可用 MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result); mappingJacksonValue.setJsonpFunction(callback); return mappingJacksonValue; }

如图,这就是jsonp

那么只要在js需要调用jsonp的地方稍加处理就能够跨域调用数据了~

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

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

var Menu = function () { return { getMenuData: function (json) { console.log(json); var data = json.data; var html = ""; for (var i = 0 ; i < data.length ; i ++) { var url = data[i].u; var name = data[i].n; var sub = data[i].i; html += ""; html += "<li>"; html += "<a href='" + url + "'>" + name; html += "<span></span>"; html += "</a>"; html += "<ul>"; for (var j = 0 ; j < sub.length ; j ++) { var url = sub[j].u; var name = sub[j].n; var node = sub[j].i; html += "<li>"; html += "<a href='" + url + "'>" + name; html += "<span></span>"; html += "</a>"; html += "<ul>"; for (var k = 0 ; k < node.length ; k ++) { // debugger var name = node[k]; var last = name.split("|"); html += "<li>"; html += "<a href='" + last[0] + "'>" + last[1] + "</a>"; html += "</li>"; } html += "</ul>"; html += "</li>"; } html += "</ul>"; html += "</li>"; } $("#itemCatMenu").html(html); }, getJSONP: function (serverUrl, callbackFun) { $.ajax({ type: "get", url: serverUrl, dataType: "jsonp", jsonp: "callback", jsonpCallback: callbackFun, success: function(json){ // console.log(json); }, error: function(e){ if (e.status != "200") { console.log(e); } } }); } }; }(); $(document).ready(function() { var serverUrl = "http://localhost:8088/rest/menu/list"; Menu.getJSONP(serverUrl, "Menu.getMenuData"); });

展示的效果:



Spring 4.1+JSONP的使用指南
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:

SpringJSONP

标签分类:

Spring JSONP 上一篇:上一篇:举例讲解Java中synchronized关键字的用法
下一篇: 下一篇:Java设计模式编程之解释器模式的简单讲解

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • C# JSON格式化转换辅助类 ConvertJson

    C# JSON格式化转换辅助类 ConvertJson

    2016-05-02 18:00

  • JS简单循环遍历json数组的方法

    JS简单循环遍历json数组的方法

    2016-04-30 11:04

  • jQuery基于json与cookie实现购物车的方法

    jQuery基于json与cookie实现购物车的方法

    2016-04-24 11:00

  • jQuery遍历json的方法分析

    jQuery遍历json的方法分析

    2016-04-24 10:00

网友点评