ajax跨域请求发生的原因:
1 浏览器限制 域名和端口不一致时会阻拦请求 请求可以发送成功 response中也有数据,就是不会返回前台
2 跨域
3 XHR XMLHttpRequest请求
如果不用XHR请求,可以请求成功,例如把请求写在Img 的src中
1 浏览器限制 域名和端口不一致时会阻拦请求 请求可以发送成功 response中也有数据,就是不会返回前台
2 跨域
3 XHR XMLHttpRequest请求
如果不用XHR请求,可以请求成功,例如把请求写在Img 的src中
只有上述三个情况同时满足才会发生跨域请求问题解决办法从这三个方面入手:
1 修改浏览器设置,依赖于客户端,修改每个使用者的浏览器设置,不现实
2 不使用XHR请求,使用jsonp请求方法,
jsonp请求方法:
$.ajax({
dataType:'jsonp'
});
需要后台代码修改,不然会报语法错误。(这是jsonp的约定)
jsonp 实际上是把请求转为一个javascript标签,(js标签是实时销毁的)发出去的时候加了一个callback 回调函数,后台收到一个回调函数就知道是jsonp请求方式。返回的是js;
添加参数jsonp:“callback2”
修改jsonp的参数为非callback,后台没有收到callback就会返回json数据。
jsonp不是一个非官方协议,是一个约定。
但是jsonp有很多弊端,(需要改动代码支持,只支持get请求)使用不多。
3 从跨域着手思路
1:被调用方设置参数,在返回数据时,设置消息头,告诉浏览器允许这个域名的请求
简单请求和非简单请求:
简单请求(先接受请求再检查):
get head post 请求header中无自定义头 content-Type为: text/plain multipart/form-data application/x-www-form-urlencoded
非简单请求 put delete 发送json格式的post请求 带自定义头的ajax请求