如何从我的angularjs页面中的RESTful API访问服务?


Answers:


145

选项1:$ http服务

AngularJS提供的$http服务完全可以满足您的需求:使用JSON将AJAX请求发送到Web服务并从中接收数据(非常适合与REST服务通信)。

举个例子(取自AngularJS文档,稍作改动):

$http({ method: 'GET', url: '/foo' }).
  success(function (data, status, headers, config) {
    // ...
  }).
  error(function (data, status, headers, config) {
    // ...
  });

选项2:$资源服务

请注意,AngularJS中还有另一个服务,该$resource服务以更高级的方式提供对REST服务的访问(示例再次取自AngularJS文档):

var Users = $resource('/user/:userId', { userId: '@id' });
var user = Users.get({ userId: 123 }, function () {
  user.abc = true;
  user.$save();
});

选项3:矩形

此外,还有第三方解决方案,例如Restangular。请参阅其文档以了解如何使用它。基本上,这是一种更具声明性的方式,可以使您摆脱更多细节。


1
您能在这里帮我吗?我不知道 stackoverflow.com/questions/16463456/…。我无法从REST API加载服务。得到一个空数组。谢谢
anilCSE

@GoloRoden我看到有人在处理CORS时使用$ http.defaults.useXDomain = true。真的有必要这样做吗?因为我只是在不同的域中设置了laravel和angular。我用角度的http请求打了laravel控制器。无论我是否使用$ http.defaults.useXDomain,它都可以正常工作。有什么合乎逻辑的解释吗?
under5hell 2014年


10

欢迎来到Angular的美好世界!

我对angularJS很陌生。我正在寻找从RESTful API访问服务的信息,但我一无所知。请帮助我做到这一点。谢谢

如果您当前正在使用“ GET”服务,则编写第一个Angular脚本有两个(非常大)障碍。

首先,您的服务必须实现“ Access-Control-Allow-Origin”属性,否则,当从例如Web浏览器调用时,服务将起作用,但从Angular调用时,服务将失败。

因此,您需要在web.config文件中添加几行:

<configuration>
  ... 
  <system.webServer>
    <httpErrors errorMode="Detailed"/>
    <validation validateIntegratedModeConfiguration="false"/>
    <!-- We need the following 6 lines, to let AngularJS call our REST web services -->
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        </customHeaders>
    </httpProtocol>
  </system.webServer>
  ... 
</configuration>

接下来,您需要向HTML文件中添加一些代码,以强制Angular调用“ GET” Web服务:

// Make sure AngularJS calls our WCF Service as a "GET", rather than as an "OPTION"
var myApp = angular.module('myApp', []);
myApp.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

一旦有了这些修复程序,实际上调用RESTful API就非常简单。

function YourAngularController($scope, $http) 
{
    $http.get('http://www.iNorthwind.com/Service1.svc/getAllCustomers')
        .success(function (data) {
        //  
        //  Do something with the data !
        //  
    });
}

您可以在此网页上找到这些步骤的非常清晰的演练:

使用Angular和JSON数据

祝好运 !

麦克风


10
您为什么要鼓励某人完全开放其Web服务到Internet?本Access-Control-Allow-Origin不应该是一个外卡,除非你面对API公共...
戴夫·麦金托什

7

只是为了在$http此处扩展(快捷方式):http : //docs.angularjs.org/api/ng.$http

//页面中的代码段

$http.get('/someUrl').success(successCallback);
$http.post('/someUrl', data).success(successCallback);

//可用的快捷方式

$http.get
$http.head
$http.post
$http.put
$http.delete
$http.jsonp

1
.success()和.error()被弃用。您应该改用.then()和.catch()
Derber Alter

0

例如,您的json看起来像这样:{“ id”:1,“ content”:“ Hello,World!”}

您可以像下面这样通过angularjs进行访问:

angular.module('app', [])
    .controller('myApp', function($scope, $http) {
        $http.get('http://yourapp/api').
            then(function(response) {
                $scope.datafromapi = response.data;
            });
    });

然后在您的html上,您将像这样:

<!doctype html>
<html ng-app="myApp">
    <head>
        <title>Hello AngularJS</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
        <script src="hello.js"></script>
    </head>

    <body>
        <div ng-controller="myApp">
            <p>The ID is {{datafromapi.id}}</p>
            <p>The content is {{datafromapi.content}}</p>
        </div>
    </body>
</html>

如果您不想下载它们,则会为angularjs调用CDN。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script src="hello.js"></script>

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.