Javascript AngularJS HTTP头

Javascript AngularJS HTTP头,javascript,angularjs,http,header,Javascript,Angularjs,Http,Header,我有一些问题。来自外部url的AngularJS应用程序数据。这是我的密码。如何写入授权头。响应为HTTP状态401 app.controller('AddressController', function($scope, $http){ $http.defaults.headers.common.Authorization = 'username password'; $http.get('http://URL/resources/cities?sortBy=cityId&sortOr

我有一些问题。来自外部url的AngularJS应用程序数据。这是我的密码。如何写入授权头。响应为HTTP状态401

app.controller('AddressController', function($scope, $http){
$http.defaults.headers.common.Authorization = 'username password';
$http.get('http://URL/resources/cities?sortBy=cityId&sortOrder=asc&offset=0&limit=100').
    success(function(data, status, headers, config){
        $scope.posts = data;
    }).
    error(function(data, status, headers, config){

    });
});

我过去也遇到过类似的问题,更准确地说,是CORS问题。 您可以在以下网站上阅读有关跨来源资源共享(CORS)的更多信息:

简言之,当您没有设置访问web服务上特定文件或数据的权限时,就会发生CORS,在您的Apache2服务中就是这样。 因此,当您尝试访问它们时,它只会告诉您:“响应为HTTP状态401,访问被拒绝”

为了解决这个问题,换句话说,允许访问您的资源,您可以做两件事:

  • 修复Apache2.config文件
  • 在AngularJS控制器上设置权限
我总是选择第一个选项,修复我的Apache2.config文件。 您可以在一些Apache2文件夹中找到您的Apache2.conf文件。 登记就行了

现在我将向您展示我是如何解决这个问题的。简而言之,我的Apache2服务器上有一些JSON,我需要在AngularJS控制器上获取它们,以便在我的视图中显示一些数据

我有点像:

myController.js

myApp.controller("myController", ["$scope","$http",function($scope, $http){

    var controller = this;

    $http.get('http://localhost/main.json').success(function(dataForViews){

        controller.data = dataForViews;

    })  
}]);
在我的Html视图中我只是用如下语法请求数据:

<p> {{myController.dataForViews.Name}} </p>
{{myController.dataForViews.Name}

现在,为了允许访问,我将此代码放在我的Apache2.config上:

<VirtualHost *:80>


    ServerAdmin yourName@yourName

    #Giving permissions
    Header set Access-Control-Allow-Origin "*"

    ############################ Main Page ###########################
    Alias /main.json /var/www/html/myApp/data/mainPages/mainJSON.json

    #When localhost/myApp, you get the application that runs on localhost:9000 
    #with its jsons
    <Location /myApp>
        ProxyPass  http://localhost:9000/
        ProxyPassReverse  http://localhost:9000/
    </Location>

    #Same thing for scripts, css, etc, like:
    <Location /scripts>
      ProxyPass  http://localhost:9000/scripts/
      ProxyPassReverse  http://localhost:9000/scripts/
    </Location>

</VirtualHost>

服务器管理员yourName@yourName
#给予许可
标题集访问控制允许原点“*”
############################主页###########################
别名/main.json/var/www/html/myApp/data/mainPages/mainJSON.json
#当使用localhost/myApp时,您将获得在localhost:9000上运行的应用程序
#带着它的JSON
ProxyPasshttp://localhost:9000/
ProxyPassReversehttp://localhost:9000/
#脚本、css等也一样,比如:
ProxyPasshttp://localhost:9000/scripts/
ProxyPassReversehttp://localhost:9000/scripts/
我能够像这样访问我的Apache2服务器上的资源。 现在,你可以像我一样解决,或者,如果你有一些错误,你可能需要看看

如果您希望以AngularJS的方式解决此问题,请查看:

  • 这是@Quentin写的
  • 这是@CapK写的
  • 以及其他相关问答

希望我能帮上忙。

您使用的是哪种外部服务?我是说类似Apache的东西,你把它整理好了吗?