之前一直只知道有跨域这一说,但并没有在项目中实战过。就在昨日有一个小需求就需要用到跨域。因此将实战的结果记录下。
跨域原理:ajax不能请求非当前服务之外的服务。
具体步骤
1:引入jquery
2:前端请求代码
- $.ajax({
- type:"POST",dataType:"jsonp",cache:false,jsonp: "callbackparam",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
- jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
- data:{"keyword":keyword,"entry":20},url:"http://21.179.197.101:84/tyjs/searchFirst2.do",success:function(resultData){
- alert(resultData);
- }
- });
3:后端接收代码
说明
1:参数callbackparam就是前端定义的参数名,这是约定的参数名哦
2:然后通过参数名callbackparam获取到的值就是 前端定义的 jsonpCallback值
3:后端响应数据格式: 参数名callbackparam的值(要响应的数据格式,也就是前端要接收的数据格式)
4:后端响应格式就要设置为text/plain非json了哦。前端可以写json,会自动转换
- @ResponseBody
- @RequestMapping("/searchFirst2")
- public void searchFirst2(String callbackparam,SearchView sv,Paging<Info> paging,HttpServletResponse resp) throws ServletException,IOException {
- resp.setContentType("text/plain;charset=utf-8");
- String keyword = sensitiveWordUtlis.filterInfo2(sv.getKeyword());
- sv.setKeyword(keyword);
- if (StringUtils.isNotEmpty(keyword)) {
- searchService.count(sv.getKeyword());
- try {
- searchService.searchFirst(paging,sv);
- } catch (Exception e) {
- logger.error(e);
- }
- }
- String jsonData = JsonMyUtil.object2json(paging);
- jsonData = String.format("%s(%s)",callbackparam,jsonData);
- resp.getWriter().print(jsonData);
- resp.flushBuffer();
- }
参考前辈的经验(里边有介绍到原理)