电商平台有个具备的左侧商品类目的导航栏的结构。

通过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形式跨域访问实现电商平台的左侧导航栏的更多相关文章

  1. jsonp实现跨域访问

    要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...

  2. 使用jsonp进行跨域访问

    一.使用场景 当我们请求非本服务器的资源的时候,浏览器会禁止访问,并提示不允许跨域访问.此时我们可以使用jsonp这种请求方式,从其他服务器获取资源.在客户端调用提供jsonp支持的接口,获取json ...

  3. 深入了解jsonp解决跨域访问

    在这个项目中,我们做的充分利用jsonp这是一个特点跨界,完成简单的单点登录认证和权限控制的统一.道,各有各的优点.各有各的优点,选择什么方式实现全然取决于我们自己或者项目经理的开发经验,对各种框架的 ...

  4. jsonp实现跨域访问json数据

    前台js function init() { $.ajax({ url: 'http://localhost:8012/index.json', dataType: "jsonp" ...

  5. 04-Flutter移动电商实战-打通底部导航栏

    关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...

  6. AJax与Jsonp跨域访问

    一.JavaScript的AJax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML) 设计AJax使用的一种重要技术 ...

  7. Jsonp跨域访问

    很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...

  8. 用jQuery与JSONP轻松解决跨域访问的问题

    浏览器端的真正跨域访问,推荐的是目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的. var qsData = {'searchWord':$("# ...

  9. C# 和Jsonp的一个小demo 用jQuery与JSONP轻松解决跨域访问的问题

    客服端:      在A项目下面 建立一个 JsonpClient.aspx页面,代码如下: <%@ Page Language="C#" AutoEventWireup=& ...

随机推荐

  1. 深度学习---tensorflow简介

    个core可以有不同的代码路径.对于反向传播算法来说,基本计算就是矩阵向量乘法,对一个向量应用激活函数这样的向量化指令,而不像在传统的代码里会有很多if-else这样的逻辑判断,所以使用GPU加速非常 ...

  2. [解决] Error Code: 1044. Access denied for user 'root'@'%' to database

    今天在测试集群用的mysql上,遇到个权限的问题: SQLException : SQL state: 42000 com.mysql.jdbc.exceptions.jdbc4.MySQLSynta ...

  3. 洛谷 P2800 又上锁妖塔

    https://www.luogu.org/problem/show?pid=2800 题目背景 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩& ...

  4. HDU 5950Recursive sequence ICPC沈阳站

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. Linux powercli 以及connect-viserver 连接问题

    1. 参考文档 http://fdo-workspace.blogspot.hk/2017/07/powershell-powercli-for-linux-server.html 2. powers ...

  6. [uva11174]村民排队 递推+组合数+线性求逆元

    n(n<=40000)个村民排成一列,每个人不能排在自己父亲的前面,有些人的父亲不一定在.问有多少种方案. 父子关系组成一个森林,加一个虚拟根rt,转化成一棵树. 假设f[i]表示以i为根的子树 ...

  7. 【BZOJ】1014 [JSOI2008]火星人prefix

    [算法]splay [题解]对于每个结点维护其子树串的hash值,前面为高位,后面为低位. sum[x]=sum[L]*base[s[R]+1]+A[x]*base[s[R]]+sum[R],其中su ...

  8. 暑假集训——cf热身赛部分题有感加其题解

    刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...

  9. hadoop+spark 集群的安装

    1.安装连接 https://www.cnblogs.com/zengxiaoliang/p/6478859.html

  10. python基础===getattr()函数使用方法

    getattr(object, name[,default]) 获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选.需要注意的是,如果是返回的对象的方法,返回的 ...