使用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=& ...
随机推荐
- HDU1828线段树(扫描线)
Picture Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Java 中 给静态方法 添加泛型 (static <T>)
今天在用到static方法的时候.想要用泛型.结果不能通过编译. 上网查了一下.其具体写法如下:
- jQuery中val()、text()、html()之间的差别
一.括号里没有值时表示取值 val获取表单中的值: text获取对象中的文本内容,不包含html标签: html获取对象中的内容,包括html标签 <!DOCTYPE HTML> & ...
- Centos7下关于memcached的安装和简单使用
在这里,由于用编译安装memcached服务端过于复杂,因此我选用依赖管理工具 yum 来实现 memcached 的服务端安装: [root@localhost /]# yum install -y ...
- Why to Not Not Start a Startup
我花了周六,周日两天的时间,把这篇长文给阅读完了.很受益,改变了我的很多认知,也给我开拓了视野. 转载: Want to start a startup? Get funded by Y Combin ...
- szoj657 【AHSDFZNOI 7.2 WuHongxun】Odd
[题目大意] 给出$n$个数$a_1, a_2, ..., a_n$,求有多少个区间$[l, r]$,满足每个数都出现了奇数次. $1 \leq n \leq 2 * 10^5, 0 \leq a_i ...
- loj515 「LibreOJ β Round #2」贪心只能过样例
传送门:https://loj.ac/problem/515 [题解] 容易发现S最大到1000000. 于是我们有一个$O(n^2*S)$的dp做法. 容易发现可以被bitset优化. 于是复杂度就 ...
- 「6月雅礼集训 2017 Day5」吃干饭
[题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T ...
- bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树
Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,00 ...
- parseInt函数
1.概念 解析字符串,返回一个整数 2.说明 接收两个参数:需要转化的字符串.需要解析的数字基数,介于2~36之间(若该值神略或为0,数字将以10为基数解析:若参数大于36或小于2则返回NaN) pa ...