跨域问题
1.ajax请求什么时候会引发跨域问题?
在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。
1.2:发生环境模拟
当在a服务器的页面中发生ajax请求其他域(这里指http://eureka7002.com:6061/)的资源时,浏览器的控制台就会抛出异常信息
发送的ajax请求
$.ajax({
type :"get",
url :"http://eureka7002.com:6061/myServlet",
dataType : "JSON"
data: {"userName":"天雁"},
success : function(data) {
alert(data);
},error: function () {
alert("请求错误")
}
});
引发的错误信息
这种情况之下,b服务器可以接受到a服务器的ajax请求以及数据的,但是无法成功的响应
2.解决方案
2.1在b服务器端添加响应头信息,表示支持所有网站的请求
response.setHeader("Access-Control-Allow-Origin", "*");
2.2使用JSONP
在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,即一般的ajax是不能进行跨域请求的。但 img、iframe 、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。利用 script标签的开放策略,我们可以实现跨域请求数据,当然这需要服务器端的配合。Jquery中ajax 的核心是通过 XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加
当我们正常地请求一个JSON数据的时候,服务端返回的是一串 JSON类型的数据,而我们使用 JSONP模式来请求数据的时候服务端返回的是一段可执行的 JavaScript代码。因为jsonp 跨域的原理就是用的动态加载 script的src ,所以我们只能把参数通过 url的方式传递,所以jsonp的 type类型只能是get!
使用JSONP模式来请求数据的整个流程:
客户端发送一个请求,规定一个可执行的函数名(这里就是 jQuery做了封装的处理,自动帮你生成回调函数并把数据取出来供success属性方法来调用,而不是传递的一个回调句柄),服务器端接受了这个 backfunc函数名,然后把数据通过实参的形式发送出去
第一步:修改a服务器的ajax请求:
$.ajax({
type :"get", //jso