使用jsonp形式跨域访问实现电商平台的左侧导航栏
电商平台有个具备的左侧商品类目的导航栏的结构。

通过jsonp跨域访问电商平台的后台管理系统商品分类。(主要实现后台Java代码)
实现基本步骤:
1、在后台管理系统中准备相应的json数据。

pojo:
public class ItemCatData {
@JsonProperty("u")
private String url;
@JsonProperty("n")
private String name;
@JsonProperty("i")
private List<?> iList;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<?> getiList() {
return iList;
}
public void setiList(List<?> iList) {
this.iList = iList;
}
}
/**
* 前台需要的类目json数据
* @author Administrator
*
*/
public class ItemCatResult {
@JsonProperty("data")
private List<ItemCatData> itemCats = new ArrayList<ItemCatData>(); public List<ItemCatData> getItemCats() {
return itemCats;
} public void setItemCats(List<ItemCatData> itemCats) {
this.itemCats = itemCats;
}
}
service:
@Autowired
private ItemCatMapper itemCatMapper;
@Autowired
private RedisService redisService; //注入redis伪service
private static final ObjectMapper MAPPER = new ObjectMapper(); //为前台来准备数据
public ItemCatResult queryCats(){ /* 步骤:
* 1、获取所有的数据
* 2、一次循环获取当前节点的所有的子节点
* 3、三级遍历组织数据
*/
List<ItemCat> cats = itemCatMapper.select(null);
//构建一个map,里面存放当前节点下的,所有的子节点数据
Map<Long,List<ItemCat>> map = new HashMap<Long,List<ItemCat>>();
for(ItemCat cat : cats){
//先判断这个key是否存在
if(!map.containsKey(cat.getParentId())){
//不存在,创建key,并创建List
map.put(cat.getParentId(), new ArrayList<ItemCat>());
}
map.get(cat.getParentId()).add(cat);
} //一级菜单
ItemCatResult result = new ItemCatResult();
List<ItemCatData> list1 = new ArrayList<ItemCatData>();
//遍历一级菜单
String url = "";
String name = ""; for(ItemCat cat1 : map.get(0L)){
ItemCatData d1 = new ItemCatData();
url = "/products/"+cat1.getId()+".html";
d1.setUrl(url);
name = "<a href=\""+url+"\">"+cat1.getName()+"</a>";
d1.setName(name); //遍历二级菜单
List<ItemCatData> list2 = new ArrayList<ItemCatData>();
for(ItemCat cat2 : map.get(cat1.getId())){
ItemCatData d2 = new ItemCatData();
url = "/products/"+cat2.getId()+".html";
d2.setUrl(url);
d2.setName(cat2.getName()); //遍历三级菜单
List<String> list3 = new ArrayList<String>();
for(ItemCat cat3 : map.get(cat2.getId())){
url = "/products/"+cat3.getId()+".html";
list3.add(url+"|"+cat3.getName());
}
d2.setiList(list3);
list2.add(d2);
}
d1.setiList(list2); //二级菜单
list1.add(d1); result.setItemCats(list1);
} return result;
}
Controller:
public class WebItemController {
@Autowired
private ItemCatService itemCatService;
@Autowired
private ItemService itemService;
/**
* 前台类目json数据
* @param id
* @return
*/
@RequestMapping("/web/itemcat/all")
@ResponseBody
public Object toItem(String callback){
MappingJacksonValue mjv = new MappingJacksonValue(itemCatService.queryCats());
mjv.setJsonpFunction(callback);
return mjv;
}
}
2、前台发起跨域请求;
http://manage.jt.com/web/itemcat/all?callback=category.getDataService
3.解析json数据;
使用jsonp形式跨域访问实现电商平台的左侧导航栏的更多相关文章
- jsonp实现跨域访问
要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...
- 使用jsonp进行跨域访问
一.使用场景 当我们请求非本服务器的资源的时候,浏览器会禁止访问,并提示不允许跨域访问.此时我们可以使用jsonp这种请求方式,从其他服务器获取资源.在客户端调用提供jsonp支持的接口,获取json ...
- 深入了解jsonp解决跨域访问
在这个项目中,我们做的充分利用jsonp这是一个特点跨界,完成简单的单点登录认证和权限控制的统一.道,各有各的优点.各有各的优点,选择什么方式实现全然取决于我们自己或者项目经理的开发经验,对各种框架的 ...
- jsonp实现跨域访问json数据
前台js function init() { $.ajax({ url: 'http://localhost:8012/index.json', dataType: "jsonp" ...
- 04-Flutter移动电商实战-打通底部导航栏
关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...
- AJax与Jsonp跨域访问
一.JavaScript的AJax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML) 设计AJax使用的一种重要技术 ...
- Jsonp跨域访问
很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...
- 用jQuery与JSONP轻松解决跨域访问的问题
浏览器端的真正跨域访问,推荐的是目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的. var qsData = {'searchWord':$("# ...
- C# 和Jsonp的一个小demo 用jQuery与JSONP轻松解决跨域访问的问题
客服端: 在A项目下面 建立一个 JsonpClient.aspx页面,代码如下: <%@ Page Language="C#" AutoEventWireup=& ...
随机推荐
- lightoj 1214
lightoj 1214 Large Division (大数除法) 链接:http://www.lightoj.com/volume_showproblem.php?problem=1214 题意 ...
- git merge与git rebase
文章源:https://blog.csdn.net/wh_19910525/article/details/7554489 git merge是用来合并两个分支的. git merge b # 将b分 ...
- sublime 常用插件 感觉比较全了 够用了
插件介绍 Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/instal ...
- Commonjs,AMD,CMD和UMD的差异
CommonJS 一种服务器端模块化的规范,Nodejs实现了这种规范,所以就说Nodejs支持CommonJS. CommonJS分为三部分: require 模块加载 exports 模块导出 m ...
- js_时间戳和时间格式之间的转换。
关于我的理解,简单明了点: 时间戳:把一个日期使用一个数字表示出来,这个数字就是这个日期的秒数. 日期:就是我们常见的时间表现形式. 时间戳对于一般看时间不够直观明了,可是在程序的世界里作用可大了. ...
- 在使用ubuntu16.04+python3.5 下使用pip3出现pip3 error - '_NamespacePath' object has no attribute 'sort'
使用pip3安装tensorflow以及gensim等时,出现如下错误: Traceback (most recent call last): File "/usr/local/bin/pi ...
- Quartz的Properties文件解析
将可变信息放在properties文件是使配置更加灵活. 1.文档位置和加载顺序 1. StdSchedulerFactory默认加载quartz包下的quartz.properties文件,如果我们 ...
- Java面向对象的三个特征与含义
封装 1.英文为 encapsulation,实现信息隐藏: 2.把同一类事物的特性归纳到一个类中(属性和行为),隐藏对象的内部实现: 继承 1.英文为 inheritance: 2.继承的过程,是从 ...
- python基础===requests学习笔记
这里有一个新的学习requests网站:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html2017/11/30 Requ ...
- 苹果电脑Mac OS系统重装图文详解
苹果电脑Mac OS系统重装图文详解 本文来自于[系统之家] www.xp85.com现在电脑都很强大,可是也很脆弱,常常需要你去维护,甚至经常需要你重装系统,那么Mac OS又如何重装系统呢?刚刚使 ...