AngularJS中与服务器交互

        真正的应用需要和真实的服务器进行交互,无论你是想把数据持久化到云端,还是需要与其他用户进行实时交互,都需要让应用与服务器时进行交互。

        为了实现这一点,Angular提供了一个叫做$http的服务。它提供了一个可扩展的抽象方法列表,使得与服务器的交互更加容易。它支持HTTP、JSONP和CORS方式。它还包含了安全性支持,避免JSON格式的脆弱性和XSRF(跨站请求伪造)。它让你可以轻松的转换请求和响应数据,甚至还实现了简单的缓存。

        比如说我们已经创建了一个服务器,当查询/products路径时,它会以JSON格式返回一个商品列表。

        返回的响应示例如下:

products.json

[
	{
		"id":0,
		"title":"Paint pots",
		"description":"Pots full of paint",
		"price":3.95
	},
	{
		"id":1,
		"title":"Polka dots",
		"description":"Dots with that polka groove",
		"price":12.95
	},
	{
		"id":2,
		"title":"Pebbles",
		"description":"Just little rocks,really",
		"price":6.95
	}
]

模板和控制器如下:

<html ng-app='myApp'>
<head>
	<title>Http实例</title>
</head>
<body ng-controller='ShoppingController'>
	<h1>Shop!</h1>
	<table>
		<tr ng-repeat="item in items">
			<td>{{item.title}}</td>
			<td>{{item.description}}</td>
			<td>{{item.price | currency}}</td>
		</tr>
	</table>
	<script src="lib/angular/angular.js"></script>
	<script>
		var myApp=angular.module('myApp',[]);
		myApp.controller('ShoppingController', function($scope, $http) {
			$http.get('/products').success(function(data, status, headers, config){
				$scope.items = data;
			});
		});
	</script>
</body>
</html>

        当然,上面的代码由于没有后台的/products服务接口,所以会报404错误。

        如果要让上面的代码可以运行,有如下两种方法:

一.在工程下新建一个用于保存json数据的文件

        如在WebContent下新建json文件夹,下面建products.json,内容如返回的products.json,然后进一步修改模板和控制器如下:

<html ng-app='myApp'>
<head>
	<title>Http实例</title>
</head>
<body ng-controller='ShoppingController'>
	<h1>Shop!</h1>
	<table>
		<tr ng-repeat="item in items">
			<td>{{item.title}}</td>
			<td>{{item.description}}</td>
			<td>{{item.price | currency}}</td>
		</tr>
	</table>
	<script src="lib/angular/angular.js"></script>
	<script>
		var myApp=angular.module('myApp',[]);
		myApp.controller('ShoppingController', function($scope, $http) {
			$http.get('json/products.json').success(function(data, status, headers, config){
				$scope.items = data;
			});
		});
	</script>
</body>
</html>
二.采用ngResource方式
        当然也需在WebContent下新建json文件夹,此文件夹下再建products.json,内容如返回的products.json。
<html ng-app='myApp'>
<head>
	<title>Http实例</title>
</head>
<body ng-controller='ShoppingController'>
	<h1>Shop!</h1>
	<table>
		<tr ng-repeat="item in items">
			<td>{{item.title}}</td>
			<td>{{item.description}}</td>
			<td>{{item.price | currency}}</td>
		</tr>
	</table>
	<script src="lib/angular/angular.js"></script>
	<script src="lib/angular/angular-resource.js"></script>
	<script>
		var myApp=angular.module('myApp',['ngResource']);
		myApp.controller('ShoppingController', function($scope, $http, Products) {
			$scope.items = Products.query();
		}).factory('Products', function($resource){
		  return $resource('json/products.json', {}, {
		    query: {method:'GET', isArray:true}
		  });
		});
	</script>
</body>
</html>

运行效果如下:

AngularJS中与服务器交互
        从长远来看,让服务来代理与服务器交互的工作对我们有好处,这个服务可以被多个控制器共享。

 

资料来源:《用AngularJS开发下一代Web应用》

你可能感兴趣的:(JavaScript,AngularJS,$http)