如何解决ajax跨域访问的问题!

本文详细介绍并演示了三种解决Ajax跨域访问的方法:利用jsonp实现跨域、服务器端放开访问权限以及使用filter全面放开访问权限。每种方法均有具体代码示例,包括前端js与后端java代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何解决ajax跨域访问的问题!

在这里我有三种方式可以解决跨域访问的问题;
第一种方法是:jsonp实现ajax跨域访问
下面直接上代码:
示例如下:
html代码:

<body>
    <input type="button" "testJsonp();" value="TestJsonP">
</body>

js代码:

function testJsonp(){
    $.ajax({
        type : 'GET',
        dataType : 'jsonp', // 数据类型配置成jsonp
        jsonp : "callback", //配置jsonp随机码标签,在服务器代码部分需要用到他来拼接一个json的js对象
        url : 'http://127.0.0.1:8001/test', //服务路径
        async : false,
        data: {
            "type":'0',
        },
        success : function (response) {
            if(response.code == 200){
                alert('返回成功!');
            }else{
                alert('服务器异常!');
            }
        },
        error : function (){
            alert('服务器异常!');
        }
    });
}

java代码:

@RequestMapping(value = "/test", method = RequestMethod.GET)
    public @ResponseBody String testJsonp(@RequestParam(value = "type", defaultValue = "") String type, String callback) {
        RequestResult data = new RequestResult(); // 配置需要返回的结果
        data.setCode(200);
        data.setMessage("success");
        // 接收参数callback名称需要与js中配置的jsonp标签名一致
        String result = callback+"("+JSONObject.fromObject(data).toString()+")";//拼接可执行的js
        return result;
    }

在这种方法中我们还要注意以下几点:
1. jsonp只支持GET方式的请求,无论ajax中的type配置成何种方式,都会在默认以GET方式发送请求。无法满足restful方式的请求。
2. ajax中的jsonp的标签名要与服务端的接收标签参数一致。本例中都设置为’callback’.
3. 若想传递一个json格式的js对象到服务器,可以使用JSON.stringify()方法将js对象转化为json字符串,赋值到某个变量。在服务器端获取这个变量的值通过json工具,将该字符串转化为java对象。

第二种方式

在服务器端放开访问权限,使允许接收ajax访问
这个时候前端代码都不需要更改只需要后端人员进行相应的修改即可;
但是这种方式也有一个缺点那就是只允许GET方式的请求,无法满足restful格式的请求

第三种方式:

在服务器端写一个filter,在doFilter方法中全面放开访问权限,并将此filter配置到web.xml中,或直接使用注解,划入spring管理。此方法完全支持restful的ajax跨域请求

在这里我 写上引用并且查找的资料,如果你们想要更加详细的了解那么可以点击这些链接以此来扩充自己的视野增加知识面;

Ajax跨域(jsonp) 调用JAVA后台 (http://www.cnblogs.com/holdon521/p/5282354.html)
springMVC获取request和response (http://blog.sina.com.cn/s/blog_7085382f0102v9jg.html)
REST跨域访问解决CorsFilter (http://blog.csdn.net/u013628152/article/details/49490213)
Spring Boot 过滤器、监听器 (http://blog.csdn.net/catoop/article/details/50501688)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值