Spring MVC实现远程调用并获取返回值

大河向东流啊 发布于 2017/08/15 17:51
阅读 853
收藏 10

ajax跨域请求:

$("#jifei").click(function() {

        Tips.confirm("确认计费?", function() {
            var cmd_uuid = $('input[name="cmd_uuid"]').val();
            $.ajax({
                url : "http://127.0.0.1:8083/tally/command/tally-order-reset",
                data : {
                    "cmd_uuid" : cmd_uuid
                },
                type : "get",
                success : function(re) {
                    Tips.tips(re.msg,re.success);
                },
                error : function(data) {
                    Tips.tips(data.msg+"返回失败");
                }
            });
        });

在被请求项目里面的spring.xml中加上:(注意:这里需要引用spring4.2及版本更高的,否则不支持<mvc:cors>)

<mvc:cors>
        <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,OPTIONS"/>
 </mvc:cors>

如果添加了拦截器需要把/tally/command/tally-order-reset加上去:

<mvc:interceptor>
            <mvc:mapping path="/**" />
            <mvc:exclude-mapping path="/tally/command/tally-order-reset" />
            <bean class="com.feiliks.hn.common.interceptor.PermissionInterceptor" />
 </mvc:interceptor>

然后再被请求的tally-order-reset方法上面加上:@CrossOrigin 代码如下

@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("tally-order-reset")
@ResponseBody
public ResponseModel reset(Long cmd_uuid){
        Boolean ret = true;
        ret = this.redisDao.setIfAbsentValue("tally-order-reset:" + cmd_uuid.toString(), 1);
        if (ret){
            this.redisDao.expire("tally-order-reset:" + cmd_uuid.toString(), 3, TimeUnit.MINUTES);
            this.tallyOrderService.reset(cmd_uuid);
            this.redisDao.delKey("tally-order-reset:" + cmd_uuid.toString());
        }else{
            ErrorType et = this.redisDao.getHashValue(RedisCacheTableKey.KEY_ERROR_TYPE, "S0001", ErrorType.class)==null?new ErrorType("S0001") : this.redisDao.getHashValue(RedisCacheTableKey.KEY_ERROR_TYPE, "S0001", ErrorType.class);
            return super.fail(et.getTrace(), et);
        }
        return super.success("计费成功!");
        
    }

通过以上方法,就能够实现ajax跨域请求并能够获取返回值,希望能给大家帮助。

加载中
0
_
_乌托邦
ajax跨域不是浏览器的限制吗,为什么后台可以解决呢?
火腿霹雳
火腿霹雳
回复 @大河向东流啊 : 关键是你的ajax跨域请求就到不了后台
大河向东流啊
大河向东流啊
如果你把项目做出来而这个功能有浏览器的限制,那用户知道怎么办吗,难道用户要处理浏览器的限制吗?显然是不可能的,后台处理了就不必管浏览器了
0
c
codingcx

添加架构师交流圈,请加微信号 codingcx,也可以添加java技术交流QQ群号318815519,大家一起快乐交流技术,互相学习分享。

返回顶部
顶部