当时是,我的项目正处于从独自开发转移到服务器上,在调试时,本地的网页去连服务器上的后端数据出了问题,干开始还纳闷,在本地时明明是好的,转到服务器上就不行了。所谓跨域访问限制,就指到网页要连接不在同一个域名下的后端,浏览器会自动禁止访问。(心虚,目前是这么理解的,日后有新的解释再来改)。解决办法目前已知有两种:
一、
js部分:
$.ajax({
url: '' ,
type: 'GET',
dataType:JSONP ,
success: function (returndata) {
var obj = eval(returndata);
alert(obj.status);
};
},
error: function (returndata) {
alert(returndata);
},
});
thinkphp后端部分:
public function index(){
$data['status'] = 200;
$this->ajaxReturn('jsonp',$data);
}
这里写的是Jquery ajax,将数据类型改为JSONP,可以进行跨域访问。tinkphp支持返回jsonp的数据传输类型。
二、
thinkphp后端部分:
header("Access-Control-Allow-Origin:*");
试过第一个方法的童鞋就知道缺点所在,jsonp只支持get的提交,而这在网站交互的使用时有很大限制的,毕竟post的使用概率远远大于get。如果必须使用post提交,这个时候只需要在php的后端的文件引入上文中的代码,就可以解决跨域的问题,而且前端的ajax数据类型改回json,php只需返回json即可。这行代码中的 * 可以改成指定域名的访问,不改则是任何域名的访问都支持。
题外话:自从知道第二种办法,博主就再也没有用过第一种了。