AngularJS $ http请求到Coursera的REST API。尽管不需要公钥,但跨越来源被拒绝

时间:2015-12-06 23:35:19

标签: ajax rest cors angular-http coursera-api

Coursera API文档:     https://tech.coursera.org/app-platform/catalog/

我尝试对api进行简单的GET调用:

喜欢这个:

$scope.courseraSearch = function(query){


    var courseraAPIUrl = 'https://api.coursera.org/api/courses.v1?q=search&query=Machine+Learning';

    $http({
      method: 'GET',
      url: courseraAPIUrl
    }).then(function successCallback(response) {
      console.log(response);
      for(i in response.data.elements){
        $scope.courseraResults.push(response.data.elements[i]);
      }
    }, function errorCallback(response) {
    });
  }

但我总是收到CORS错误或“#34;拒绝执行来自' *'因为它的MIME类型(' application / json')不可执行,并且启用了严格的MIME类型检查。"错误。

我尝试使用cors.io作为代理:

$scope.courseraSearch = function(query){

    //https://api.coursera.org/api/courses.v1?q=search&query=Calculus
    var courseraAPIUrl = 'http://cors.io/?u=https://api.coursera.org/api/courses.v1?q=search&query=Machine+Learning';

    $http({
      method: 'GET',
      url: courseraAPIUrl
    }).then(function successCallback(response) {
      console.log(response);
      for(i in response.data.elements){
        $scope.courseraResults.push(response.data.elements[i]);
      }
    }, function errorCallback(response) {
    });
  }

但是这样做,我似乎无法传递任何参数(当我传入"机器学习"查询时,它返回正常查询,好像我没有进行任何搜索术语)

我已经尝试过jsonp ......

1 个答案:

答案 0 :(得分:2)

使用cors.io,您应该确保参数编码正确。最简单的方法是使用params HTTP配置属性

$http.get('http://cors.io/', {
    params: {
        u: 'https://api.coursera.org/api/courses.v1?q=search&query=Machine+Learning'
    }
})