跨域请求

跨域请求:实际经验说明只要不在同一个项目里面,异步请求另外一个项目,就要使用jsonp,否则请求不会成功. 而且jsopn的请求方式只能是get请求,post请求不支持jsonp的请求.

发送请求代码:

$.ajax({

                                     url:'http://10.10.37.234:4567/visitorDeatil/submit',

                                     dataType:'jsonp',

                                     type:"get",

                                     contentType:'application/json',

                                     data:{

                                                        contacts:"dfdf",

                                                        company:"fdfd",

                                                        duty:"dsfsdf",

                                                        remak:"fdsf",

                                                        phone:"fsdf",

                                                        systemCode:"1"

                                               },

                                               success:function(data) {

                                                        callback(data)

                                               }

                                     })

//这样才能拿到数据

                   functioncallback(data){                    

                            alert(data.msg)

                  

                   }

Jsonp请求路径上有callback函数,所以在服务中返回数据的时候,跟普通的请求的返回数据是不一样的,要返回一个js格式的数据,相当于把数据放到callback的函数里面返回.

服务端的代码:

@RequestMapping(value = "/submit", method = RequestMethod.GET)

    @ResponseBody

    public Objectsubmit(VisitorProbationDetail visitor, Stringcallback) throws Exception {

       if (StringUtils.isEmpty(visitor.getContacts()) ||StringUtils.isEmpty(visitor.getCompany())

              || StringUtils.isEmpty(visitor.getPhone())) {

           String result = callback + "(" + JSONObject.toJSON(ApiResult.build(0,"信息不完整!!!")).toString() +");";

           returnresult;

       }

       String msg = visitorService.save(visitor);

       if (0 ==msg.length()) {

           String result = callback + "(" + JSONObject.toJSON(ApiResult.build(200,"恭喜您申请成功!!!")).toString() +");";

           returnresult;

       }

       returncallback +"(" +JSONObject.toJSON(ApiResult.build(0,msg)).toString()+");";

    }

 

于普通请求返回数据不同的地方就是把json数据做了一层封装,封装到callback函数里面.


更高级的实现方式 在java后端设置一个拦截器  js 和原生js一样 不需要任何的处理 接口的返回也不需要()包裹;

所有的操作都是和不跨域的请求一样的;

@Component
public class CORSInterceptor extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      //添加跨域CORS
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token");
      response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
      return true;
  }

}


@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter   {

 
    public void addInterceptors(InterceptorRegistry registry) {  
        registry.addInterceptor(new CORSInterceptor()).addPathPatterns("/**");  
    } 


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值