AngularJS 如何实现跨域请求?

AngularJS 跨域问题通常通过配置 $http 服务来解决,使用 withCredentials 选项来允许跨域请求携带凭证。服务器端也需要设置相应的 CORS(跨源资源共享)策略,以允许特定来源的请求。

跨域问题在前端开发中是一个常见且重要的问题,尤其是在使用AngularJS进行开发时,跨域请求通常涉及到不同域名、协议或端口之间的通信限制,为了解决这一问题,AngularJS提供了多种实现跨域请求的方法,主要包括JSONP和CORS机制,下面将详细介绍这些方法及其实现方式:

AngularJS 如何实现跨域请求?

一、$http.jsonp【实现跨域】

JSONP(JSON with Padding)是一种常见的跨域解决方案,它通过动态创建<script>标签来绕过浏览器的同源策略。

1、指定callback和回调函数名:函数名为JSON_CALLBACK时,会调用success回调函数,JSON_CALLBACK必须全为大写。

   $http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=JSON_CALLBACK&siteid=137bd406").success(function(data) {
       // 处理返回的数据
   });

2、指定其它回调函数:但必须是定义在window下的全局函数,URL中必须加上callback

   $http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=badgeabc&siteid=137bd406");
   function badgeabc(data) {
       // 处理返回的数据
   }

二、$http.get【实现跨域】

使用CORS(Cross-Origin Resource Sharing)机制来实现跨域请求,CORS允许服务器声明哪些来源有权限访问资源。

1、在服务器端设置允许在其他域名下访问

   response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名访问
   response.setHeader("Access-Control-Allow-Origin", "http://www.123.com"); // 允许特定域名访问

2、AngularJS端使用$http.get()

   function getAdustryController($scope, $http) {
       $http.get('http://localhost/ajax/getAllIndustryCategoty.pt?languageColumn=name_eu').success(function(data) {
           $scope.industries = data;
       });
   }

三、$http.post【实现跨域】

POST请求同样可以通过CORS机制实现跨域。

AngularJS 如何实现跨域请求?

1、在服务器端设置允许在其他域名下访问,及响应类型、响应头设置

   response.setHeader("Access-Control-Allow-Origin", "*");
   response.setHeader("Access-Control-Allow-Methods", "POST");
   response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");

2、AngularJS端使用$http.post(),同时设置请求头信息:

   function getAdustryController($scope, $http) {
       $http.post('http://localhost/ajax/getAllIndustryCategoty.pt', { languageColumn: 'name_eu' }, { 'Content-Type': 'application/x-www-form-urlencoded' }).success(function(data) {
           $scope.industries = data;
       });
   }
方法 描述 示例代码
JSONP 通过动态创建
免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入