咱们能够使用内置的$http服务直接同外部进行通讯。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。json
一、链式调用api
$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的
配置内容。这个函数返回一个promise对象,具备success和error两个方法。promise
$http({
url:'data.json',
method:'GET'
}).success(function(data,header,config,status){
//响应成功
}).error(function(data,header,config,status){
//处理响应失败
});
二、返回一个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()则会对响应对
象进行析构。
三、快捷的get请求
①$http.get('/api/users.json');
函数
get()方法返回HttpPromise对象。post
还能够发送好比:delete/head/jsonp/post/put 函数内可接受参数jsonp
②以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。
jsonp(url,config) 其中config是可选的
var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");
url
四、也能够将$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请求时使用。
它还能够在POST请求里发送二进制数据。要发送一个blob对象,你能够简单地经过使用data参数来传递它。
例如:
var blob=new Blob(['Hello world'],{type:'text/plain'});
$http({
method:'POST',
url:'/',
data:blob
});
四、响应对象
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状态文本。五、缓存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。