美文网首页
JSONP实现跨域

JSONP实现跨域

作者: Yluozi | 来源:发表于2021-03-30 11:04 被阅读0次

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

后台接口实现1:



      // 查询试用产品分类
    @GetMapping("/selectCategoryListByJsonP")
    @ResponseBody
    public Object selectCategoryListByJsonP(HttpServletRequest request, HttpServletResponse response,String mallId)throws IOException {
        String str1=mallId.substring(0, mallId.indexOf("_"));
        String str2=mallId.substring(str1.length()+1, mallId.length());
        QueryResult queryResult = new QueryResult<>();
        List<Map> list =new ArrayList<>();
        if(str2.equals("00")){
            list = categoryRepository.getCategoryByDepartmentIdAndCategoryParentGroupById(str1);
        }
        else{
            list = mallProductRepository.getListGroupByCategory(mallId);
        }
        queryResult.setRecords(list);
        String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数
        String resultJSON = JSONObject.toJSONString(queryResult);
        Object result=(StringUtils.isNotBlank(jsonpCallback) ? jsonpCallback : "jsonpCallback") + "(" + (resultJSON != null ? resultJSON : "") + ")";
        log.info(result.toString());
        return result;
    }
        

2


    // 查询试用产品分类
    @GetMapping("/selectCategoryListByJsonP")
    @ResponseBody
    public void selectCategoryListByJsonP(HttpServletRequest request, HttpServletResponse response,String value)throws IOException {
        response.setContentType("text/plain");
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        String str1=value.substring(0, value.indexOf("_"));
        String str2=value.substring(str1.length()+1, value.length());
        QueryResult queryResult = new QueryResult<>();
        List<Map> list =new ArrayList<>();
        if(str2.equals("00")){
            list = categoryRepository.getCategoryByDepartmentIdAndCategoryParentGroupById(str1);
        }
        else{
            list = mallProductRepository.getListGroupByCategory(value);
        }
        queryResult.setRecords(list);
        PrintWriter out = response.getWriter();
        JSONObject resultJSON = JSONObject.parseObject(JSONObject.toJSON(queryResult).toString());//根据需要拼装json
        String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数
        out.println(jsonpCallback+"("+resultJSON+")");
        out.flush();
        out.close();
    }

前台接收

 $.ajax({
        type:"get",
        async:false,
        url:"https://knmarket.cnki.net/knmarket-web/mallProduct/selectCategoryListByJsonP?value=116_00",
        dataType:"jsonp",
        jsonp:"jsonpCallback",
        success:function(data){
            alert("here::"+JSON.stringify(data))
        },
  error:function(errormsg){
      alert("error")
  }
})

相关文章

网友评论

      本文标题:JSONP实现跨域

      本文链接:https://www.haomeiwen.com/subject/obbwhltx.html