java和jQuery实现跨域

转载:http://girl-luo.iteye.com/blog/2325074

在学习下面代码时区,如果基础不太好请到该网站:http://www.imooc.com/video/6239

jquery端代码

 $.ajax({ 
         async:false, 
         url: 'http://www.**.com/**/jsonp', // 跨域URL 
         dataType: 'jsonp', 
         timeout: 5000, 
         success: function (json) { 
          alert(JSON.stringify(json));
         }
     });

java web端代码

    @ResponseBody
    @RequestMapping(value = "/jsonp",method=RequestMethod.GET)
    public String jsonp(HttpServletRequest request) {
        String callback =request.getParameter("callback");
        return callback+"([{name:'jsonp',age:'30'},{name:'jack',age:'90'}])";
    }

执行结果

[{"name":"jsonp","age":"30"},{"name":"jack","age":"90"}]

 以上是不指定任何参数,jquery自动传递一个callback参数到后台,成功后,回调success函数。

  $.ajax({ 
         async:false, 
         url: 'http://www.**.com/**/jsonp', // 跨域URL 
         dataType: 'jsonp',

         jsonp:'jsoncallback',//自定义参数名称
         timeout: 5000, 
         success: function (json) { 
          alert(JSON.stringify(json));
         }
     });

 java web端代码

    @ResponseBody
    @RequestMapping(value = "/jsonp",method=RequestMethod.GET)
    public String jsonp(HttpServletRequest request) {
        String jsoncallback=request.getParameter("jsoncallback");//指定接受参数为jsoncallback
        return jsoncallback+"([{name:'jsonp',age:'30'},{name:'jack',age:'90'}])";
    }

 以上是自定义参数名称,后台指定接受通过jsonp冒号传递的函数名称。

         $.ajax({ 
         async:false, 
         url: 'http://www.**.com/**/jsonp', // 跨域URL 
         dataType: 'jsonp',

         jsonp:'jsoncallback',//自定义参数名称

         jsonpCallback:"success_jsonpCallback",//定义回调函数名称
         timeout: 5000, 
         success: function (json) { 
          alert(JSON.stringify(json));
         }
     });

var success_jsonpCallback=function(json){

    alert(JSON.stringify(json)+"********");

}

执行结果

[{"name":"jsonp","age":"30"},{"name":"jack","age":"90"}]********

[{"name":"jsonp","age":"30"},{"name":"jack","age":"90"}]

 以上是自定义回调函数名称,执行成功后,先执行jsonpCallback定义的回调函数,后执行success函数。


自己感觉这个方法有以下两个缺点:

①后端返回的json字符串时,要拼接上前端传过来的callback数据,所以自己得在后台用java把类解释成json数据格式。如果是用Spring MVC或者Spring Boot的话,就会莫名奇妙的增加了自己的工作量。

② 只能用GET请求,不能使用post请求


另一个超级简单的方法:在幅度按进行以下header设置既可。前端就可以自由进入

public Result Logon(@PathVariable("id") Integer id, HttpServletResponse res){
//        用来设置允许那些网址可以过来。*号代表所有都可以进来
        res.addHeader("Access-Control-Allow-Origin","*");
//        允许那些请求可以过来,包括POST,GET,DELETE,PUT
        res.addHeader("Access-Control-Allow-Methods","POST,GET");
        return logonService.getMassage(id);
    }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值