AngularJs 与服务器通信 $http, $q, $resource
$http服务是AngularJS系统自带的,可以用来进行网络通信、获取远程服务器的数据。要记住的是,$http是对浏览器XMLHttpRequest的封装,也就是说,它其实是Ajax。
$http(options).success(successFn).error(errorFn)
- options:包括url、method(get或post)
- successFn:成功的回调
- errorFn:失败的回调
$http(options)返回的是一个被封装的promise对象,promise.then(function(data){},function(err){})
q服务。q服务是在AngularJS中用来创建promise对象的,但它首先创建一个defered对象:var defered = $q.defer();
defered对象有3个方法resolve, reject, notify
userService.getRandomUser = function () {
var defered = $q.defer();
$http.get(url)
.success(function (data) { defered.resolve(data.results[0]); })
.error(function (err) { defered.reject(err); });
return defered.promise; // 把defered对象中的promise对象返回出来
};
angular-resource.js中的ngResource模块中提供了一个provider $resource。
$resource服务是一个创建资源对象的工厂,用来创建同服务端交互的对象,因此我们并不是直接使用$resource服务本身同服务器通信,而是通过其创建的对象来和服务端通信。 $resource(url, [paramDefaults], [actions], options)
url: 一个参数化的url模板,带有前缀参数(如:/api/users/:userId)
paramDefaults: url参数的默认值,参数对象中的每一个键值对都是先绑定到一个url模板,任何多余的密钥都被附加到url query的?后。/path/:verb +{verb:’greet’,salutation:’hello’} => /path/greet?salutation=hello。如果参数的任何一个值是函数,它将作为每一次请求获取的参数值而被执行。
actions: 用户对于resource行为的默认设置进行扩展的自定义配置的散列,该配置将会以$http.config的格式创建。
action: 字符串,action的名称,这个名称将成为resource对象方法的名称。
method: 字符串,http方法(不区分大小写,如GET,POST,PUT,DELETE,MOVE等)
params: 对象,行为预先设定的参数,
url: 字符串,资源地址
isArray: boolean, 如果为true,那么这个行为返回的对象是一个数组。
transformRequest: 函数/函数的数组。转换函数获取http请求体和请求头,并且返回他们的转换版(通常是序列化)
transformResponse: 函数/函数的数组。转换函数获取http响应体和响应头,并且返回他们的转换办(通常是序列化)
cache: boolean, 如果为true, 一个默认的$http缓存将被作为请求的缓存,否则如果存在一个用$cacheFactory创建的缓存实例将用于缓存。
timeout:数值,毫秒,超时则让请求中止
responseType: 字符串,响应头类型,用来设置XMLHttpRequestResponseType属性
interceptor: 对象,拦截对象有两个可选方法-response和responseError。
options: 扩展$resourceProvider行为的自定义设置,唯一支持的选项是stripTrailingSlashes, boolean类型,如果为真,url尾部的斜杠会被移除(默认为true)。
var User = $resource('/api/users/:userId', {userId: '@id'});
$resource服务提供的默认actions有5个:
actions: {
'get': {method: 'GET'},
'save': {method: 'POST'},
'query': {method: 'GET', isArray: true},
'remove': {method: 'DELETE'},
'delete': {method: 'DELETE'}
}
User对象包含两个get方法,三个非get类型方法:
User.get({id: '123'}, successFn, errorFun); // 请求地址/api/users/123
User.query(params, successFun, errorFun); // 请求多条数据
User.save(params, payload, successFun, errorFun); // params用于填充url变量, payload是请求体
User.delete(params, payload, successFun, errorFun); // delete请求
User.remove(params, payload, successFun, errorFun); //delete请求, 移除多条数据
除了这5种默认actions,我们还可以自定义扩展action,
$resource( url, {}, {
sendEmail: {
method: 'POST',
url: '',
params: {},
isArray: boolean,
transformRequest: 函数或函数数组, // function(data) {return angular.toJson(data); } 把对象转换成json字符串
transformResponse: 函数或函数数组, // function(data) {return angular.formJson(data);} 把json字符串解析为一个对象
interceptor: {
response: function(d){}
responseError: function(d){}
}
}
})
AngularJs 与服务器通信 $http, $q, $resource的更多相关文章
- Angularjs学习笔记(四)----与后端服务器通信
一.使用$http进行XHR和JSONP请求 1.1 XHR请求 GET:$http.get(url,config) POST:$http.post(url,data,config) PUT:$htt ...
- Angularjs通过$http与服务器通信
angular是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面上进行展示的数据从哪里来,肯定需要服务端进行支持,那么angular是如何同服务端进行交互的呢? $http angul ...
- AngularJS与服务器交互(4)
转自:http://itindex.net/detail/50919-angularjs-%E6%9C%8D%E5%8A%A1%E5%99%A8-%E4%BA%A4%E4%BA%92 对于AJAX应用 ...
- vuejs与服务器通信
vuejs与服务器通信 与服务器通信 Vue 实例的原始数据 $data 能直接用 JSON.stringify() 序列化.社区贡献了一个插件 vue-resource,提供一种容易的方式与 RES ...
- Socket与SocketServer结合多线程实现多客户端与服务器通信
需求说明:实现多客户端用户登录,实现多客户端登录一般都需要使用线程技术: (1)创建服务器端线程类,run()方法中实现对一个请求的响应处理: (2)修改服务器端代码,实现循环监听状态: (3)服务器 ...
- 【转】angular通过$http与服务器通信
http://www.cooklife.cn/detail/54c5044ec93620284e964b58#View angular是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面 ...
- 客户端(android,ios)与服务器通信
android,ios客户端与服务器通信为了便于理解,直接用PHP作为服务器端语言 其实就是一个 http请求响应的过程序,先从 B/S模式说起浏览器发起http请求,服务器响应请求,并把数据返回给浏 ...
- [转]浏览器如何和Web服务器通信
http://hi.baidu.com/ywqme/item/b5297014b2e58f4e6826bb74 概述 普通网民打开网页,访问网站,并不需要了解所谓HTTP协议.作为软件工程师,了解一下 ...
- Android操作HTTP实现和服务器通信
众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HT ...
随机推荐
- 每天一道leetcode203-移除链表的元素
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 2018. ...
- Firebird 安装多实例
火鸟数据库的安装向导,默认不允许多实例. 但是不管出于什么原因,若想安装多实例,很简单. 1.先用安装文件,按照向导安装第一个实例. 2.安装后不要启动服务,根据需要配置好Firebird.conf. ...
- Redis 【keys】 一句话说明
DEL----------------------------------删除给定的一个或多个key DUMP--------------------------------序列化给定key,并返回被 ...
- 怎样在 Azure 应用服务中生成和部署 Java API 应用
先决条件 Java 开发人员工具包 8(或更高版本) 已在开发计算机上安装 Maven 已在开发计算机上安装 Git Azure 订阅付费版或试用版 HTTP 测试应用程序,如 Postman 使用 ...
- 多边形游戏(DP)
Description 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符 "+" 或 "*". ...
- SpringMVC笔记:annotation注解式开发
一.配置式开发 在我们之前的学习中,springmvc使用配置式开发模式,需要在核心配置文件中springmvc.xml注册大量的bean来注入controller控制器,工作繁琐容易出错,下面我们学 ...
- 基于 java 【Web安全】文件上传漏洞及目录遍历攻击
前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...
- K:括号分隔符匹配问题
相关介绍: 括号分隔符匹配问题是指,判断所输入的字符串表达式中的括号是否匹配的问题,例如1+(12+2)*(1+2)便是一个括号分隔符匹配的表达式,而(12+1)*4+(12/2]就是一个括号分隔符 ...
- js-script标签放在的位置
* 建议把script标签放到</body>后面 * 如果现在有这样一个需求 在js里面需要获取到input里面的值,如果把script标签放到head里面,会出现问题.HTML解析是从上 ...
- 移动端HTML5实现文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. 用的技术 ...