Angular $http 服务/控制器到 JSONP

Posted

技术标签:

【中文标题】Angular $http 服务/控制器到 JSONP【英文标题】:Angular $http service / controller to JSONP 【发布时间】:2015-12-31 21:19:04 【问题描述】:

由于我的跨域错误,我正在尝试将我的 $http 调用转换为 JSONP 调用。

请求中没有“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:5000” 访问。

我是一个初学者,已经从我的控制器中提取了我的 GET 服务,我正在努力寻找根据 Angular 文档将 $http 更改为 $http.jsonp(url) 的位置

这是我的 service.js

.service('NCAAF',function($http, $ionicLoading) 
  return 
    get: function() 
      $ionicLoading.show(
        template: 'Loading...',
        delay: 300
      )
      return $http (
      
        method: 'GET',
        cache: true,
        crossDomain: true,
        dataType: 'jsonp',
        url: 'https://www.kimonolabs.com/api/[key]?callback=JSON_CALLBACK',
        headers: 
              'authorization': 'Bearer [auth]'
        
      );
    
  ;
)

controller.js

.controller('NCAAFCtrl', function ($scope, NCAAF, $ionicPopup, $ionicLoading) 
  var doGet = function() 

    NCAAF.get().
      success(function (data) 
        $scope.data = data['results']['collection1'];
        $ionicLoading.hide();
      ).
      error(function () 
        $ionicLoading.hide();
        var alertPopup = $ionicPopup.alert(
          title: 'Something went wrong',
          template: 'Try reloading in a few seconds.'
        );
        alertPopup.then(function() 
          console.log('Fix this ish');
        );
      ).
       finally(function() 
        $scope.$broadcast('scroll.refreshComplete');
      );
    ;
  $scope.doRefresh = function() 
    doGet();
  ;

  doGet();
)

【问题讨论】:

【参考方案1】:

JSONP 可以让你做 cors 请求,但这并不意味着你就能得到正确的响应。

JSONP 要求您将 JSON 响应包装到 javascript 函数调用中。 当您执行 JSONP 请求时,查询字符串将设置一个名为 'callback' 将告诉您的服务器如何包装 JSON 响应。

服务器应该使用请求字符串中的回调参数来设置 做出相应的回应。

所以响应应该是

callback([ “access_token”: “asdfsd”, “expires”: “86400" ,"type" : "bearer"
]);

从角度来看,它看起来像

angular.callbacks._0([ “access_token”: “asdfsd”, “expires”: “86400" ,“type” :
“bearer” ]);

但只是为了您有关如何进行 jsonp 调用的信息,请更改您的代码

return $http (
      
        method: 'GET',
        cache: true,
        crossDomain: true,
        dataType: 'jsonp',
        url: 'https://www.kimonolabs.com/api/[key]?callback=JSON_CALLBACK',
        headers: 
              'authorization': 'Bearer [auth]'
        
      );

 return $http.jsonp('https://www.kimonolabs.com/api/[key]?callback=JSON_CALLBACK',
headers: 
              'authorization': 'Bearer [auth]'
        
);

【讨论】:

以上是关于Angular $http 服务/控制器到 JSONP的主要内容,如果未能解决你的问题,请参考以下文章

Angular http post 仅在 Chrome 中在服务器上返回 403 错误

Angular 2 http服务中的访问控制允许来源问题

Angular:$http 404 错误处理

在 Typescript 中解析 JSON 对象

Angular2 Http 发布请求未绑定到 ASP.NET 5 控制器的操作

Angular找不到变量:数据