访问其他网站的API 的时候,有时候会出现这样的问题:
XMLHttpRequest cannot load
‘https://’ (某网站)
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
按照chrome的报错,上网找了下原因和解决办法。
原因: 浏览器出于安全考虑,默认禁止跨域访问。
那么什么是跨域访问?
跨域访问就是两个不同域名之间通过AJAX 跨域名请求或发送数据,这违反了同源策略,是不安全的。
解决方法:
网上的解决方大致分三种:
1. 浏览器设置 : 传送门: http://blog.csdn.net/ziwoods/article/details/51062206
2. 客户端解决方法: 传送门: http://blog.csdn.net/net_lover/article/details/5172509
3. 服务器端:传送门 : http://blog.csdn.net/james_wade63/article/details/50772041
我用的是客户端解决方案 使用JSONP 来解决跨域访问问题:
首先将 $http.post() 改成 $http.jsonp();
当天真的我以为问题已经得到解决的时候, console 给我了一个惊喜
Error : [$sce :insecurl] ;
what? 用过 ng-repeat 循环输出带 html 元素 的同学也许碰到过这样一个问题:
输出在网页里的html 元素原样输出了,并没有被解析,其实这是 angularJS 开发人员为了安全起见做出的决策 , 这时候就需要用到 $sce .
$sce 常见的方法有:
$sce.trustAs(type,name);
$sce.trustAsHtml(value);
$sce.trustAsUrl(value);
$sce.trustAsResourceUrl(value);
$sce.trustAsJs(value);
$scope.trustUrl = $sce.trustAsResourceUrl("http://...........");
$http.jsonp($scope.trustUrl).then(function(response){
$scope.result =response.data;
});
这样跨域问题就解决了:)