AngularJS中$http服务的简单用法

我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。

1、链式调用

$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的

配置内容。这个函数返回一个promise对象,具有success和error两个方法。

$http({

url:‘data.json‘,

method:‘GET‘

}).success(function(data,header,config,status){

//响应成功

}).error(function(data,header,config,status){

//处理响应失败

});

2、返回一个promise对象

var promise=$http({

method:‘GET‘,

url:"data.json"

});

由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果

使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个

可选的函数作为参数。或者可以使用success和error回调代替。

promise.then(function(resp){

//resp是一个响应对象

},function(resp){

//带有错误信息的resp

});

或者这样:

promise.success(function(data,status,config,headers){

//处理成功的响应

});

promise.error(function(data,status,hedaers,config){

//处理失败后的响应

});

then()方法与其他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对

象进行析构。

3、快捷的get请求

①$http.get(‘/api/users.json‘);

get()方法返回HttpPromise对象。

还可以发送比如:delete/head/jsonp/post/put 函数内可接受参数具体参照148页

②以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。

jsonp(url,config) 其中config是可选的

var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");

4、也可以将$http当做函数来使用,这时需要传入一个设置对象,用来说明如何构造XHR对象。

$http({

method:‘GET‘,

url:‘/api/users.json‘,

params:{

‘username‘:‘tan‘

});

其中设置对象可以包含以下主要的键:

①method

可以是:GET/DELETE/HEAD/JSONP/POST/PUT

②url:绝对的或者相对的请求目标

③params(字符串map或者对象)

这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。

比如这个:

//参数会转为?name=ari的形式

$http({

params:{‘name‘:‘ari‘}

});

④data(字符串或者对象)

这个对象中包含了将会被当作消息体发送给服务器的数据。通常在发送POST请求时使用。

从AngularJS 1.3开始,它还可以在POST请求里发送二进制数据。要发送一个blob对象,你可以简单地通过使用data参数来传递它。

例如:

var blob=new Blob([‘Hello world‘],{type:‘text/plain‘});

$http({

method:‘POST‘,

url:‘/‘,

data:blob

});

4、响应对象

AngularJS传递给then()方法的响应对象包含了四个属性。

◇data

这个数据代表转换过后的响应体(如果定义了转换的话)

◇status

响应的HTTP状态码

◇headers

这个函数是头信息的getter函数,可以接受一个参数,用来获取对应名字值

例如,用如下代码获取X-Auth-ID的值:

$http({

method: ‘GET‘,

url: ‘/api/users.json‘

}).then (resp) {

// 读取X-Auth-ID

resp.headers(‘X-Auth-ID‘);

});

◇config

这个对象是用来生成原始请求的完整设置对象。

◇statusText(字符串)

这个字符串是响应的HTTP状态文本。

5、缓存HTTP请求

默认情况下,$http服务不会对请求进行本地缓存。在发送单独的请求时,我们可以通过向$http请求传入一个布尔值或者一个缓存实例来启用缓存。

$http.get(‘/api/users.json‘,{ cache: true })

.success(function(data) {})

.error(function(data) {});

第一次发送请求时,$http服务会向/api/users.json发送一个GET请求。第二次发送同一个GET请求时,$http服务会从缓存中取回请求的结果,而不会真的发送一个HTTP GET请求。

在这个例子里,由于设置了启用缓存,AngularJS默认会使用$cacheFactory,这个服务是AngularJS在启动时自动创建的。

如果想要对AngularJS使用的缓存进行更多的自定义控制,可以向请求传入一个自定义的缓存实例代替true。

时间: 2024-10-20 20:50:13

AngularJS中$http服务的简单用法的相关文章

Mac使用Launchd命令行lauchctl操作服务的简单用法

注意:操作时前面比如带上sudo,不然只能操作当前用户的服务,会出现无法操作一些root用户的服务的问题.系统版本为Mac 10.12. 1.配置好plist之后: #加载一个服务到启动列表 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist #卸载一个服务 sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist 2.查看所有服务: sudo launch

【android】Socket简单用法

原文地址:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用起来很方便! 下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现

第12章 剪贴板_12.1 剪贴板的简单用法

12.1 剪贴板的简单用法 12.1.1 剪贴板的标准格式 分类 标准格式 说明 文本格式 CF_TEXT 以NULL结尾的ANSI字符集,每行结尾含有回车换行符,最后的NULL表示整个数据的结束. CF_OEMTEXT 以NULL结尾的OEM字符集,供MS-DOS下的剪贴板使用 CF_UNICODETEXT 类似CF_TEXT,每行以回车换行结束,字符两个NULL标志着整个数据的结束. CF_SYLK 含有微软件符号链接(Symbolic Link)格式数据的内存块.用与Excel程序交换,是

android: 服务的基本用法

9.3   服务的基本用法 了解了 Android 多线程编程的技术之后,下面就让我们进入到本章的正题,开始对服务 的相关内容进行学习.作为 Android 四大组件之一,服务也少不了有很多非常重要的知识点, 那我们自然要从最基本的用法开始学习了. 9.3.1    定义一个服务 首先看一下如何在项目中定义一个服务.新建一个 ServiceTest 项目,然后在这个项目中 新增一个名为 MyService 的类,并让它继承自 Service,完成后的代码如下所示: public class My

android-service的简单用法

service是android开发中的四大组件之一,下面来介绍service的简单用法 1.需要新建一个service类,该类继承与service接口,需要实现onBind方法,这个方法之后介绍 2.创建intent对象,设置intent的目标为新建的service的类,启动service的方法有两种用startservice方法和bindservice方法 两种方法的不同在于startservice在启动服务之后,关闭当前的activity之后service还在系统后台运行 bindservi

ORM 一对一 以及csrf 的简单用法

ORM 一对一 1. 什么时候用一对一? 当 一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁 把不怎么常用的字段 单独拿出来做成一张表 然后用过一对一关联起来 2. 优势 既保证数据都完整的保存下来,又能保证大部分的检索更快 3. ORM中的用法 class Author(models.Model): name = models.CharField(max_length=16, unique=True) books = models.ManyToManyField(to='Bo

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<