JAVA跨域

在做项目的时候遇到了跨域的问题…

后端跨域,一般会修改头部信息
看了一下度娘,很多都是filter 设置”Access-Control-Allow-Origin”
然后我就写了个servlet(对方是用ajax[jsonp]调用的),代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String origin = request.getHeader("Origin");            
    response.setHeader("Access-Control-Allow-Origin",origin); 
    response.setHeader("Access-Control-Allow-Credentials","true"); 
    //do sth 
    String result = "testResult"; 
    response.getWriter().println(result); 
}

果然,对方可以正常调用,但是收不到我发送的数据。。。

百思不得其解之下,我寻求其它的思路,于是便修改代码,如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //get the backcall 获取回调方法  
    String back = WebUtils.getHTTPRequestParameter(request, "callback");
    //do sth
    JSONObject json= new JSONObject();
    json= (new JSONObject()).put("status", "success");
    //发送数据的时候加上 回调方法 格式如: backcall(111)
    response.getWriter().println(back+"("+json.toString()+")");
}

附上前端代码

$.ajax({  
        url:"",//跨域调用的url 
        dataType:'jsonp',  
        data:'',  
        jsonp:'callback',  
        success:function(result) {  
            //do sth 
        } 
    });

Jsonp原理
首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里(动态执行回调函数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值