使用$ http GET的AngularJS API调用错误

时间:2014-03-26 17:55:39

标签: javascript angularjs api angularjs-service angularjs-http

我正在尝试使用Angular创建一个使用我的API的简单应用。我正在使用VM来运行代码,并且我在我的计算机上访问它,因此要从我的机器调用API,我可以使用cURL或任何其他HTTP客户端,一切正常。一个例子:

curl -k --user damien@email.com:密码https://api.my.domain.com/v1/traveler/get

这将返回一个旅行者名单。我需要“信任”证书,因为它无效。因此,首先在浏览器上调用将返回net::ERR_INSECURE_RESPONSE,所以我只是转到API URL并添加异常,现在我不再有这个问题了。然后我不得不添加基本身份验证,它似乎工作。让我们看看我的代码是什么,如果您发现任何错误,请告诉我,我正在遵循本教程使用外部API:http://www.toptal.com/angular-js/a-step-by-step-guide-to-your-first-angularjs-app

app.js:

angular.module('TravelerApp', [
    'TravelerApp.controllers',
    'TravelerApp.services'
]);

services.js:

angular.module('TravelerApp.services', [])
.factory('TravelerAPIService', function($http) {
    var travelerAPI = {};

    $http.defaults.headers.common.Authorization = 'Basic ABC743HFEd...=';

    travelerAPI.getTravelers = function() {
        return $http({
            method: 'GET',
            url: 'https://api.my.domain.com/v1/traveler/get'
        });
    }

    return travelerAPI;
});

最后,controllers.js:

angular.module('TravelerApp.controllers', [])
.controller('travelersController', function($scope, TravelerAPIService) {
    $scope.travelersList = [];

    TravelerAPIService.getTravelers()
    .success(function(data) {
        console.log('SUCCESS');
        $scope.travelersList = data;
    })
    .error(function(data, status) {
        console.log('ERROR');
        $scope.data = data || "Request failed";
        $scope.status = status;
    });
});

错误状态代码为0,错误数据为空字符串。

2 个答案:

答案 0 :(得分:4)

精密工业:

我对HTTP POST查询有相同的行为。 我确定:

  • 未在服务器上发出请求
  • 没有发送查询的角度

最后我找到了答案:

因为我(可能是你)正在发送一个自签名的httpS服务器。 Chrome标记为无安全。

我通过将地址放在浏览器上并手动接受证书来解决此问题。

可能相关:XMLHttpRequest to a HTTPS URL with a self-signed certificate

答案 1 :(得分:1)

我建议使用受信任的CA签名SSL证书而不是自签名证书来解决您的问题,因为大多数浏览器都不接受Google Chrome,Firefox等自签名证书。