$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的更多相关文章

  1. Angularjs学习笔记(四)----与后端服务器通信

    一.使用$http进行XHR和JSONP请求 1.1 XHR请求 GET:$http.get(url,config) POST:$http.post(url,data,config) PUT:$htt ...

  2. Angularjs通过$http与服务器通信

    angular是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面上进行展示的数据从哪里来,肯定需要服务端进行支持,那么angular是如何同服务端进行交互的呢? $http angul ...

  3. AngularJS与服务器交互(4)

    转自:http://itindex.net/detail/50919-angularjs-%E6%9C%8D%E5%8A%A1%E5%99%A8-%E4%BA%A4%E4%BA%92 对于AJAX应用 ...

  4. vuejs与服务器通信

    vuejs与服务器通信 与服务器通信 Vue 实例的原始数据 $data 能直接用 JSON.stringify() 序列化.社区贡献了一个插件 vue-resource,提供一种容易的方式与 RES ...

  5. Socket与SocketServer结合多线程实现多客户端与服务器通信

    需求说明:实现多客户端用户登录,实现多客户端登录一般都需要使用线程技术: (1)创建服务器端线程类,run()方法中实现对一个请求的响应处理: (2)修改服务器端代码,实现循环监听状态: (3)服务器 ...

  6. 【转】angular通过$http与服务器通信

    http://www.cooklife.cn/detail/54c5044ec93620284e964b58#View angular是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面 ...

  7. 客户端(android,ios)与服务器通信

    android,ios客户端与服务器通信为了便于理解,直接用PHP作为服务器端语言 其实就是一个 http请求响应的过程序,先从 B/S模式说起浏览器发起http请求,服务器响应请求,并把数据返回给浏 ...

  8. [转]浏览器如何和Web服务器通信

    http://hi.baidu.com/ywqme/item/b5297014b2e58f4e6826bb74 概述 普通网民打开网页,访问网站,并不需要了解所谓HTTP协议.作为软件工程师,了解一下 ...

  9. Android操作HTTP实现和服务器通信

    众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HT ...

随机推荐

  1. [转]How to add a script in a partial view in MVC4?

    本文转自:https://stackoverflow.com/questions/14114084/how-to-add-a-script-in-a-partial-view-in-mvc4 问题: ...

  2. TabControl 选项卡控件

    TabControl 控件是由System.Windows.Forms.TabControl类提供的,作用就是讲相关的组件组合到一系列选项卡页面上.   MulitiLine 属性用来设置是否显示多行 ...

  3. 11、Map、可变参数、Collections

    Map接口 Map集合概述 *A:Map集合概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同 a:Collection中的集合,元素 ...

  4. 04-Tomcat体系结构与插件配置

    一.发布程序详解 Context docBase:web应用的文件路径 path:URL入口 reloadable:字节码变化服务器是否重新加载web应用 二.tomcat服务器体系结构 1.Serv ...

  5. Django(二):url和views

    网络通讯的本质是socket,从socket封装到MVC模式,参见另外几篇博客.本节笔记整理自Django2.0官方文档. 一.url调度器 - django.urls.path django2.0中 ...

  6. IAAS,SAAS,PAAS, CaaS的区别

    来源:云计算头条微信公众号  作者:   你一定听说过云计算中的三个“高大上”的你一定听说过云计算中的三个“高大上”的概念:IaaS.PaaS和SaaS,这几个术语并不好理解.不过,如果你是个吃货,还 ...

  7. 说说JSON和JSONP区别

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

  8. Http Status Code 套餐合集(转载)

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 100(继续)请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议)请求者已要 ...

  9. Angular入门教程三

    4.6指令(directive) 通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的. 模板中可以使用的东西 ...

  10. Android版APM地面站,支持直连和数传台连接

    现在隆重介绍APM上的手机/平板地面站 andropilot官方链接在此http://www.diydrones.com/groups/705844:Group:1132500?xg_source=m ...