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

通过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. 【IntelliJ IDEA 12使用】导入外部包

    以前用eclipse,现在用IntelliJ IDEA,发现它确实是个很不错的工具. 用IntelliJ IDEA12这个版本导入外部JAR包,这样来操作,打开Project Structure,在m ...

  2. JS开发中自定义调试信息开关

    在开发过程中,可能随处留下几个console.log,或者alert语句,这些语句在开发过程中是很有价值的.但是项目一旦进入生产环境,过多的console.log可能影响到浏览器的运行效率,过多的al ...

  3. 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】

    模拟题,可以用树链剖分+线段树维护. 但是学了一个厉害的..树状数组的区间修改与区间查询.. 分割线里面的是转载的: ----------------------------------------- ...

  4. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  5. 【HDU】3068 最长回文

    [算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...

  6. VMware 12安装虚拟机Mac OS X 10.10使用小技巧(虚拟机Mac OS X 10.10时间设置,虚拟机Mac OS X 10.10通过代理上网,Mac OS X 10.10虚拟机优化,VMware虚拟机相互复制)

    1:修改Mac OS 系统时间 2:Mac OS系统 通过代理上网 VMware 12安装Mac OS X 10.10虚拟机优化心得 虚拟显卡硬伤,所以必须要优化下才能用,优化的原则就是能精简的精简, ...

  7. 【HMOI】小C的填数游戏 DP+线段树维护

    [题目描述] 一个长为n的序列,每个元素有一个a[i],b[i],a[i]为0||1,每个点和他相邻的两个点分别有两条边,权值为cost1[i],cost2[i],对于每个区间l,r,我们可以给每一个 ...

  8. hdu 1213 How Many Tables(并查集算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 How Many Tables Time Limit: 2000/1000 MS (Java/O ...

  9. vim 实现括号以及引号的自动补全

    编辑文件/etc/vim/vimrc sudo vim /etc/vim/vimrc 在最后添加 inoremap ( ()<ESC>i inoremap [ []<ESC>i ...

  10. mysql之安装和配置(一)

    环境 oracle linux7.3 数据库:MySQL-5.7.20 mysql的安装 先安装依赖的插件 yum install libaio 去官网下载mysql-5.7.20的tar.gz包: ...