2014-03-26 73 views
2

我想創建一個簡單的應用程序使用Angular將消耗我的API。我使用虛擬機來運行代碼,並在計算機上訪問它,所以要從我的計算機調用API,我可以使用cURL或任何其他HTTP客戶端,並且一切正常。舉個例子:

捲曲-k --user [email protected]:密碼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,錯誤數據爲空字符串。

+0

當我殺死HTTP服務器併發出請求時,我得到了類似的結果。也許相關:http://stackoverflow.com/questions/2000609/jquery-ajax-status-code-0 –

回答

4

精度:

我對HTTP POST查詢具有相同的行爲。 我相信:

  • 沒有請求已作出的服務器上
  • 它的角度是不發送的查詢

最後,我找到了答案:

因爲我(也可能是你)正在發送一個自簽名的httpS服務器。 Chrome會將其標記爲不安全。

我通過將地址放在瀏覽器中並手動接受證書來解決此問題。

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

1

我會建議使用簽名SSL證書信任的CA而不是自簽名證書這將解決你的問題,因爲大多數瀏覽器不接受自簽名證書像谷歌Chrome,火狐等。