AngularJS AJAX

$http 是用于从远程服务器读取数据的 AngularJS 服务。


AngularJS $http

AngularJS $http 服务向服务器发出请求,并返回响应。

实例

向服务器发出简单请求,并在标题中显示结果:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="myCtrl">
  6. <p>今天的欢迎消息是:</p>
  7. <h2>{{myWelcome}}</h2>
  8. </div>
  9. <p>$http 服务请求服务器上的一个页面,响应被设置为 "myWelcome" 变量的值。</p>
  10. <script>
  11. var app = angular.module('myApp', []);
  12. app.controller('myCtrl', function($scope, $http) {
  13. $http.get("welcome.htm")
  14. .then(function(response) {
  15. $scope.myWelcome = response.data;
  16. });
  17. });
  18. </script>
  19. </body>
  20. </html>

方法

上面的例子使用了 $http 服务的 .get 方法。

这个 .get 方法是 $http 服务的简写方法之一。所有简写方法如下:

  • .delete()
  • .get()
  • .head()
  • .jsonp()
  • .patch()
  • .post()
  • .put()

以上方法都是调用 $http 服务的简写方法:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="myCtrl">
  6. <p>今天的欢迎信息是:</p>
  7. <h2>{{myWelcome}}</h2>
  8. </div>
  9. <p>$http 服务请求服务器上的一个页面,响应被设置为 "myWelcome" 变量的值。</p>
  10. <script>
  11. var app = angular.module('myApp', []);
  12. app.controller('myCtrl', function($scope, $http) {
  13. $http({
  14. method : "GET",
  15. url : "welcome.htm"
  16. }).then(function mySuccess(response) {
  17. $scope.myWelcome = response.data;
  18. }, function myError(response) {
  19. $scope.myWelcome = response.statusText;
  20. });
  21. });
  22. </script>
  23. </body>
  24. </html>

上面的示例以一个对象作为参数执行 $http 服务。该对象指定 HTTP 方法、url、成功时要做什么以及失败时要做什么。


属性

来自服务器的响应是具有以下属性的对象:

  • .config 用于生成请求的对象。
  • .data 承载服务器响应的字符串或对象。
  • .headers 用于获取标题信息的函数。
  • .status 定义 HTTP 状态的数字。
  • .statusText 定义 HTTP 状态的字符串。
实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="myCtrl">
  6. <p>Data : {{content}}</p>
  7. <p>Status : {{statuscode}}</p>
  8. <p>StatusText : {{statustext}}</p>
  9. </div>
  10. <p>响应对象有许多属性。此示例演示 data、status 和 statusText属性的值。</p>
  11. <script>
  12. var app = angular.module('myApp', []);
  13. app.controller('myCtrl', function($scope, $http) {
  14. $http.get("welcome.htm")
  15. .then(function(response) {
  16. $scope.content = response.data;
  17. $scope.statuscode = response.status;
  18. $scope.statustext = response.statusText;
  19. });
  20. });
  21. </script>
  22. </body>
  23. </html>

要处理错误,请向 .then 方法中添加一个或多个函数来处理问题:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="myCtrl">
  6. <h2>{{content}}</h2>
  7. </div>
  8. <p>$http 服务在成功和失败时执行不同的功能。</p>
  9. <script>
  10. var app = angular.module('myApp', []);
  11. app.controller('myCtrl', function($scope, $http) {
  12. $http.get("wrongfilename.htm")
  13. .then(function(response) {
  14. $scope.content = response.data;
  15. }, function(response) {
  16. $scope.content = "出错了";
  17. });
  18. });
  19. </script>
  20. </body>
  21. </html>

JSON

您从响应中获得的数据应该是 JSON 格式的。

JSON 是一种很好的数据传输方式,在 AngularJS 或任何其他 JavaScript 中都很容易使用。

示例:在服务器上,我们有一个返回 JSON 对象的文件,该对象包含 15 个客户,所有客户都封装在名为 records 的数组中。

实例

ng-repeat 指令非常适合在数组中循环:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="customersCtrl">
  6. <ul>
  7. <li ng-repeat="x in myData">
  8. {{ x.Name + ', ' + x.Country }}
  9. </li>
  10. </ul>
  11. </div>
  12. <script>
  13. var app = angular.module('myApp', []);
  14. app.controller('customersCtrl', function($scope, $http) {
  15. $http.get("/znadmin/md/2849/customers.json").then(function (response) {
  16. $scope.myData = response.data.records;
  17. });
  18. });
  19. </script>
  20. </body>
  21. </html>

程序解释:

应用程序使用 $scope$http 对象定义 customersCtrl 控制器。

$http 是用于请求外部数据的 XMLHttpRequest 对象。

$http.get() 从 https://cankaoshouce.com/znadmin/md/3849/customers.json 中读取 JSON 数据

成功后,控制器在作用域中创建一个属性 myData,其中包含来自服务器的 JSON 数据。

分类导航