之前说到的$http.get和$http.post,都是基于$http的快捷方式.下面来说说完整的$http:

$http(config)

$http接受一个json格式的参数config:

config的格式如下:

{

  method:字符串 ,

  url:字符串,

  params:json对象,

  data:请求数据,

  headers:请求头,

  transformRequest:函数,转换post请求的数据的格式,

  transformResponse:函数,转换响应到的数据的格式,

  cache:布尔值,

  timeout:数值,从发出请求开始计算,等待的毫秒数,超过这个数还没有响应,则返回错误

  withCredentials:布尔值

}

1.method: (必填)

请求的方法,字符串格式,'post','get','head','delete','put','jsonp'

(其中head方法和get请求方式一致,但是head方法没有响应体,只有响应状态码,用于检测该url是否可以获得get请求)

2.url: (必填)

请求的路径,字符串格式

3.params:

请求带有的参数,json对象:

{key1:'value1',key2:'value2'}

//转换成

url?key1=value1&key2=value2

4.data:

post请求所提交的数据,字符串或者json对象

5.headers:

请求头,json对象,可以自定义配置http请求头的参数

6.transformRequest:

函数,转换post请求的数据的格式

7.transformResponse:

函数,转换响应到的数据的格式

8.cache:

布尔值,是否启用缓存(暂时不懂,需要请教老公)

9.timeout:

数值,从发出请求开始计算,等待的毫秒数,超过这个数还没有响应,则返回错误

10.withCredentials:

不懂

$http()返回一个对象,该对象有三个方法:

1. then([success],[error]):

.then()方法传入两个参数:

[success]: function(res){}

第一个参数是一个请求成功的回调函数,该函数接受1个参数res,res是一个json对象,它有四个属性值,分别是data,status,headers,congfig,这四个值就是http://www.cnblogs.com/liulangmao/p/3864954.html这里面的.success()方法传入的函数的四个参数

[error]: function(res){}

第二个参数是一个请求失败的回调函数,该函数接受1个参数res,res是一个json对象,它有四个属性值,分别是data,status,headers,congfig,这四个值就是http://www.cnblogs.com/liulangmao/p/3864954.html这里面的.error()方法传入的函数的四个参数

2. success(function(){})

.success方法传入一个参数,是请求成功的回调.该函数接受4个参数,分别就是data,status,headers,congfig,和http://www.cnblogs.com/liulangmao/p/3864954.html里面的.success()方法传入的函数的四个参数是一样的.

3. error(function(){})

.error方法传入一个参数,是请求失败的回调.该函数接受4个参数,分别就是data,status,headers,congfig,和http://www.cnblogs.com/liulangmao/p/3864954.html里面的.error()方法传入的函数的四个参数是一样的.

注意: 其中,.success和.error两个方法都返回调用自己的这个对象,所以这个对象还是具有了.then(),.success(),.error()方法,所以可以链式调用:

    var obj1 = $http({
method:'GET',
url:'/name'
}); var obj2 = obj1.success(function(res){data,status,headers,config}); var obj3 = obj2.error(function(res){data,status,headers,config}); console.log(obj1 === obj2); //true
console.log(obj1 === obj3); //true

但是.then方法不是返回调用.then的对象... 它返回的是一个promise对象... 所以它只有.then方法,二不再有.success和.error方法:

    var obj = $http({
method:'GET',
url:'/name'
}); obj.then(function(res){return res.data+'2'},function(res){return '失败'}).then(function(data){console.log(data)},function(data){alert(data)});

关于promise的.then()方法,详见: http://www.cnblogs.com/liulangmao/p/3907571.html

在这里无论请求是成功还是失败,第二次调用.then都会调用成功回调(因为它对promise发送的通知是成功通知),回调函数中的data就是上一个.then()的回调的返回值,如果是成功回调.也就是res.data+'2',如果是失败回调,那就是'失败'

angular学习笔记(二十三)-$http(1)-api的更多相关文章

  1. angular学习笔记(二十九)-$q服务

    angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构 ...

  2. angular学习笔记(二十八-附2)-$http,$resource中的promise对象

    下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...

  3. angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构

    在angular中有一个特别为RESTful架构而定制的服务,是在$http的基础上进行了封装. 但是为了学习,我们先看看用直接$http是如何构建RESTful架构的: 假设有一个银行卡的列表.需要 ...

  4. angular学习笔记(二十六)-$http(4)-设置请求超时

    本篇主要讲解$http(config)的config中的timeout项: $http({ timeout: number }) 数值,从发出请求开始计算,等待的毫秒数,超过这个数还没有响应,则返回错 ...

  5. angular学习笔记(二十五)-$http(3)-转换请求和响应格式

    本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transfo ...

  6. angular学习笔记(二十四)-$http(2)-设置http请求头

    1. angular默认的请求头: 其中,Accept 和 X-Requested-With是$http自带的默认配置 Accept:application/json,text/plain       ...

  7. angular学习笔记(二十二)-$http.post

    基本语法: $http.post('url',{},{}).success(function(data,status,headers,config){ }).error(function(data,s ...

  8. angular学习笔记(二十一)-$http.get

    基本语法: $http.get('url',{}).success(function(data,status,headers,config){}).error(function(data,status ...

  9. angular学习笔记(二)-创建angular模块

    如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...

随机推荐

  1. java线程(上)Thread和Runnable的区别

    首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈 ...

  2. PyQt5教程——对话框(6)

    PyQt5中的对话框 对话框窗口或对话框是大多数主流GUI应用不可缺少的部分.对话是两个或更多人之间的会话.在计算机应用中,对话框是一个用来和应用对话的窗口.对话框可以用来输入数据,修改数据,改变应用 ...

  3. MySQL优化小案例:连接数

    错误代码:MySQL: ERROR 1040: Too many connections 经常会遇到这个错误,要么是业务增长,正常的访问量增多,要么是自己的max_connections设置的过小了 ...

  4. Table '' is marked as crashed and should be repaired 解决方法

    解决方法: 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/mysql/user.MYI 然后myisamchk 工具会帮助 ...

  5. 解决Eclipse的Servers视图中无法添加Tomcat6/Tomcat7

    如何解决 . 关闭Eclipse . 打开WorkSpace所在的位置. {workspace-directory}/.metadata/.plugins/org.eclipse.core.runti ...

  6. R语言中数据结构

    R语言还是有点古老感觉,数据结构没有Python中那么好用.以下简单总结一下R语言中经常使用的几个数据结构. 向量: R中的向量能够理解为一维的数组,每一个元素的mode必须同样,能够用c(x:y)进 ...

  7. windows 批处理设置环境变量

      windows通过批处理设置环境变量 CreateTime--2017年8月4日11:28:11Author:Marydon 参考链接:https://wenku.baidu.com/view/a ...

  8. oracle tnsnames.ora文件用法说明

      oracle tnsnames.ora文件用法说明 CreationTime--2018年8月10日08点32分 Author:Marydon 1.用途 oracle客户端所需要的一个文件,通过该 ...

  9. 开源APP 源码

    作者:wjh2005链接:http://www.zhihu.com/question/28518265/answer/88750562来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. Cod ...

  10. smack 4.1.2+openfire 3.10.2i

    openfire 和以往版本号配置没有多大差别就不具体介绍了,网上搜会有一大堆的图解 以下主要说一下smack 4.1.2 的开发使用,在网上看了好多文章包含stackoverflow的都没有4.1以 ...