由于HTTP的CORS标准,Ajax在跨域访问时被阻止。 跨域资源共享标准( cross-origin sharing standard ),在Ajax、字体、drawImage应用情况下,需要对请求或相应做设置才能跨域访问。
Ajax跨域访问解决方案
1 CORS在服务端设置response对象的header参数
Access-Control-Allow-Origin
Access-Control-Allow-Method
提示:参数可以通过Filter或Interceptor技术进行设置。Spring提供了@CrosOrigin注解简化应用。
2 jsonp(只能解决get请求跨域)
JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写。 JSONP实现跨域请求的原理简单的说,就是动态创建< script>标签,将返回结果做成script代码函数调用的参数返回。由于< script>代码不受同源策略访问的限制所以可以跨域访问返回的。
$.ajax({
url : "https://api.douban.com/v2/book/search",
type : "GET",
dataType : "jsonp", // 返回的数据类型,设置为JSONP方式
jsonp : 'callback', //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
jsonpCallback: 'handleResponse', //设置回调函数名
...
}
提示:jsonp方式需要在服务端也进行代码处理,将json结果拼成"函数名(json结果)"格式返回。
3 使用代理模式
Ajax跨域访问—》代理(Java+HttpClient工具+CORS设置)—》微信服务接口API