jsonp 跨域

一、跨域条件( 跨域是浏览器的限制 )

1、域名不同

2、端口不同

二、解决跨域 ( 浏览器虽然不能跨域请求服务,但是可以跨域请求 js 文件 )

1、js  ajax 写法

$.ajax({
    url : "/userService/getUserById",
    type : "POST",
    dataType : "jsonp", // 返回的数据类型,设置为JSONP方式
    data : {
        id : 1
    }, 
    success: function(data){
       
    }
});

2、服务端第一种写法 ( spring4.1 之前 )(  jsonp 请求的,会带默认一个 callback 参数 )

@Controller
public class UserController {

    @Autowired
    private UserService userService;
    
    @RequestMapping(value="/userService/getUserById/{id}",produces=MediaType.APPLICATION_JSON_UTF8_VALUE")//application/json;charset=utf-8
    @ResponseBody
    public String getUserById(@PathVariable String id, String callback) {
        Map result = userService.getUserById(id);
        //响应结果之前,判断是否为jsonp请求
        if (StringUtils.isNotBlank(callback)) {//判断 callback 是否为空,因为如果是 jsonp 请求的,会带默认一个 callback 参数
            //把结果封装成一个js语句响应
            return callback + "(" + JsonUtils.objectToJson(result)  + ");";
        }
        return JsonUtils.objectToJson(result);
    }
}

3、服务端第二种写法 ( spring4.1 之后 )(  jsonp 请求的,会带默认一个 callback 参数 )

@Controller
public class UserController {

    @Autowired
    private UserService userService;
    
    @RequestMapping(value="/userService/getUserById/{id}")
    @ResponseBody
    public Object getUserById(@PathVariable String id, String callback) {
        Map result = userService.getUserById(id);
        //响应结果之前,判断是否为 jsonp 请求
        if (StringUtils.isNotBlank(callback)) {
            //把结果封装成一个js 语句响应
            MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
            mappingJacksonValue.setJsonpFunction(callback);
            return mappingJacksonValue;
        }
        return result;
    }
}

 

转载于:https://www.cnblogs.com/fangwu/p/8718915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值