jsonp跨域请求java后台

什么是JSONP为什么要用JSONP
JSONP是一种投机取巧创造的一种非官方跨域数据交互协议。
为什么要用JSONP,因为要跨域请求,一般直接请求普通文件存在跨域无权限访问的问题,至于为什么JSONP能跨域请求的话,想知道的可以百度,很多,这里就不过多赘述
举栗
前端
当前执行的项目端口号为8080,用此项目请求端口号为8082的项目
如果不是用jsonp的话
在做ajax请求的时候,请求不到并且浏览器会报错,错误如下:
XMLHttpRequest cannot load http://xxxxxxNo 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxxxxxx' is therefore not allowed access.

 window.onload = function(){
        var token ="hitomi";
         $.ajax({
             type: "get",
             async: false,
             data:{
                 token:token//传递到后台的参数
             },
             //跨域的地址(这里是http://localhost:8082是这个项目地址和端口号,user/jsonplogin请 
             求的路径,即后台的路径)
             url: "http://localhost:8082/user/jsonplogin",
             dataType: "jsonp",//返回jsonp格式即:flightHandler({xxxxx});
             jsonp: "jsonpCallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的 
             参数名(一般默认为:callback),作为request参数传到后台
             //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?", 
             jQuery会自动为你处理数据,一个jsonp的名称
             jsonpCallback:"flightHandler",
             success: function(json){
                 alert('返回成功');
             },
             error: function(){
                 alert('fail');
             }
         });
    }
function flightHandler(data) {
        //处理data
        alert(data);
     }

后端

/**
     * jsonp登录
     * @return
     */
     @ResponseBody
    @RequestMapping(value = "/jsonplogin")
    public String test(
                        HttpServletRequest request,
                        HttpServletResponse response,String token
                        ) throws Exception{
        //String result = "{"+"result"+":"+"flightHandler"+"}";//flightHandler这个参数要返回的页面 
        有的函数
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "private,no-cache,no-store,max-age=0");
        response.setDateHeader("Expires", 0);
        String str=request.getParameter("jsonpCallback");//对应ajax中jsonp传进来的值,当名称
        if (str==null||str.equals("")) {
            return str;
        } else {
            return str + "(" + str + ")";
        }
    }

前端传到后端的参数


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容