ajax跨域请求的三种方式(js+java)

7 篇文章 0 订阅

1 : 采用jsonp (只支持get请求,后端返回的jsonp格式json,后端无需做请求放行操作)

 /* $.ajax({
        type: "GET",    // 此处只能是get请求 post请求后端即使修改(method = RequestMethod.POST)了也不行
        async: false,
        url: "http:localhost:8080/APmanager-webapp/api/simCard/table?id=1&serial=123",
        dataType: "jsonp",
        jsonp: "callback",
        jsonpCallback:"flightHandler",
        success: function(json){
          alert('您查询到航班信息:票价: ' + json[0] + ' 元,余票: ' + json[1] + ' 张。');
        },
        error: function(){
          alert('fail');
        }
      }); */
    // Java 后端
 /* @RequestMapping(value = { "/simCard/table" }, produces = "application/json; charset=UTF-8",method = RequestMethod.GET)
    @ResponseBody //flightHandler
    public String save1(@RequestParam(value = "id", required = false) String id,
            @RequestParam(value = "serial", required = false) String serial,
            HttpServletRequest request, HttpServletResponse response) {
        JSONObject resultObj = new JSONObject();
        JSONArray arr = new JSONArray();
        arr.add("a");
        arr.add("b");
        arr.add("c");
        System.out.println(id);
        System.out.println(serial);
        return "flightHandler(" + arr.toString() + ")";
    } */

2 : 采用原始ajax (后端需要拦截请求 设置指定路由放行)

// Java后端代码必须设置response.setHeader("Access-Control-Allow-Origin","*");
                         //response.setHeader("Access-Control-Allow-Methods","GET,POST"); 请求放行
/*  $.ajax({
        type: "POST",   // get post 方法都是一样的
        async: false,
        url: "http:localhost:8080/APmanager-webapp/api/simCard/table?id=1&serial=123",
        dataType: "json",
        success: function(json){
          alert("success");
          alert('票价: ' + json['flightHandler'][0] + ' 元,余票: ' + json['flightHandler'][1] + ' 张。');
        },
        error: function(){
          alert('fail');
        }
      });  */

    // Java 后端
/*  @RequestMapping(value = { "/simCard/table" }, produces = "application/json; charset=UTF-8",method = RequestMethod.GET)
    @ResponseBody //flightHandler
    public String save1(@RequestParam(value = "id", required = false) String id,
            @RequestParam(value = "serial", required = false) String serial,
            HttpServletRequest request, HttpServletResponse response) {
            // 一般在请求拦截器中设置
        response.setHeader("Access-Control-Allow-Origin","*");   
        response.setHeader("Access-Control-Allow-Methods","GET,POST");        //请求放行
        JSONObject resultObj = new JSONObject();
        JSONArray arr = new JSONArray();
        arr.add("a");
        arr.add("b");
        arr.add("c");
        resultObj.put("flightHandler", arr);
        System.out.println(id);
        System.out.println(serial);
        return resultObj.toString();
    } */

3 : XHR2(XMLHttpRequest Level 2)

// 需要设置后端请求放行
//response.setHeader(“Access-Control-Allow-Origin”,”*”);
//response.setHeader(“Access-Control-Allow-Methods”,”GET,POST”); 

或者使用spring注解也可以支持跨域 @CrossOrigin(origins = "*",methods= {RequestMethod.GET,RequestMethod.POST})

//此对象相较于 level 1 版本的 增强
/* 1 可以获取服务器端的二进制数据。
2 可以友好的提交表单数据
3 可以上传文件(内置控制上传进度事件逻辑)
4 使用HTML表单来初始化一个FormData对象 */

4 : ajax jsonp 增强插件
https://github.com/congmo/jquery-jsonp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值