使用jsonp形式跨域访问实现电商平台的左侧导航栏

Posted 大圣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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;
    }
    
}

 

 1 /**
 2  * 前台需要的类目json数据
 3  * @author Administrator
 4  *
 5  */
 6 public class ItemCatResult {
 7     @JsonProperty("data")
 8     private List<ItemCatData> itemCats = new ArrayList<ItemCatData>();
 9 
10     public List<ItemCatData> getItemCats() {
11         return itemCats;
12     }
13 
14     public void setItemCats(List<ItemCatData> itemCats) {
15         this.itemCats = itemCats;
16     }
17 }
 1 service:
  
  @Autowired 2 private ItemCatMapper itemCatMapper; 3 @Autowired 4 private RedisService redisService; //注入redis伪service 5 private static final ObjectMapper MAPPER = new ObjectMapper(); 6 7 //为前台来准备数据 8 public ItemCatResult queryCats(){ 9 10 /* 步骤: 11 * 1、获取所有的数据 12 * 2、一次循环获取当前节点的所有的子节点 13 * 3、三级遍历组织数据 14 */ 15 List<ItemCat> cats = itemCatMapper.select(null); 16 //构建一个map,里面存放当前节点下的,所有的子节点数据 17 Map<Long,List<ItemCat>> map = new HashMap<Long,List<ItemCat>>(); 18 for(ItemCat cat : cats){ 19 //先判断这个key是否存在 20 if(!map.containsKey(cat.getParentId())){ 21 //不存在,创建key,并创建List 22 map.put(cat.getParentId(), new ArrayList<ItemCat>()); 23 } 24 map.get(cat.getParentId()).add(cat); 25 } 26 27 //一级菜单 28 ItemCatResult result = new ItemCatResult(); 29 List<ItemCatData> list1 = new ArrayList<ItemCatData>(); 30 //遍历一级菜单 31 String url = ""; 32 String name = ""; 33 34 for(ItemCat cat1 : map.get(0L)){ 35 ItemCatData d1 = new ItemCatData(); 36 url = "/products/"+cat1.getId()+".html"; 37 d1.setUrl(url); 38 name = "<a href=\\""+url+"\\">"+cat1.getName()+"</a>"; 39 d1.setName(name); 40 41 //遍历二级菜单 42 List<ItemCatData> list2 = new ArrayList<ItemCatData>(); 43 for(ItemCat cat2 : map.get(cat1.getId())){ 44 ItemCatData d2 = new ItemCatData(); 45 url = "/products/"+cat2.getId()+".html"; 46 d2.setUrl(url); 47 d2.setName(cat2.getName()); 48 49 //遍历三级菜单 50 List<String> list3 = new ArrayList<String>(); 51 for(ItemCat cat3 : map.get(cat2.getId())){ 52 url = "/products/"+cat3.getId()+".html"; 53 list3.add(url+"|"+cat3.getName()); 54 } 55 d2.setiList(list3); 56 list2.add(d2); 57 } 58 d1.setiList(list2); //二级菜单 59 list1.add(d1); 60 61 result.setItemCats(list1); 62 } 63 64 return result; 65 }

 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形式跨域访问实现电商平台的左侧导航栏的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 跨域请求 - JSONP获取JSON数据

关于jsonp跨域的 实现

ajax跨域

电商小程序实战教程-类别导航

浏览器端实现跨域方法汇总

JSONP 详解