使用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=& ...
随机推荐
- JavaScript知识递归实现数组中指定后代元素的查找
描述:要求将下面的数据类型中每个子孙后代id放入一个数组并返回 var arr = [ {"id":28,"text":"公司信息", &q ...
- II8部署WCF服务出错
环境:Windows 2012 R2 + IIS 8.0 + .NET 4.5 错误404.3 - Not Found: 控制面板->程序->启用或关闭Windows功能,如下图所示,将需 ...
- CAS单点登录原理
转自 https://www.cnblogs.com/lihuidu/p/6495247.html 1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密 ...
- MyISAM和InnoDB的行格式ROW_FORMAT
MyISAM行存储 MyISAM有3种行存储格式:fixed / dynamic / compressed: 格式 说明 备注 fixed 只有当表不包含变长字段(varchar/varbina ...
- 【bzoj3387-跨栏训练】线段树+dp
我们可以想到一个dp方程:f[i][0]表示当前在i个栅栏的左端点,f[i][1]表示在右端点. 分两种情况: 第一种:假设现在要更新线段gh的左端点g,而它下来的路径被ef挡住了,那么必定是有ef来 ...
- 如何使用webpack打包你的项目
webpack是前端开发中比较常用的打包工具之一,另外还有gulp,grunt.之前没有涉及过打包这块,这里介绍一下使用webpack打包的流程. Grunt和Gulp的工作方式是:在一个配置文件中, ...
- cookie、session、localstorage
最早的Cookies问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了.优势就是大家都支持,而且支持得还蛮好.cookie的内容主要包括:名字,值,过期时间, ...
- hdfs基本思想
1.hdfs的优缺点 (1)不适合大量小文件存储: (2)不适合并发写入,不支持文件随机修改:(只能append追加) (3)不支持随机读等低延时的访问方式 2.基本思想 主从结构 主节点, name ...
- ms17010利用失败解决一则
没有反弹得到session并且提示如下: [-] 10.0.131.2:445 - Service failed to start, ERROR_CODE: 216 换了一个payload set p ...
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...