AngularJs $http 请求服务
$http
$http是Angular的一个核心服务,它有利于浏览器通过XMLHttpRequest 对象或者 JSONP和远程HTTP服务器交互。
$HTTP API 是基于 $q服务暴露的deferred/promise APIs。
快捷使用方式:
$http.get
$http.head
$http.post
$http.put
$http.delete
$http.jsonp
$http.patch
设置HTTP请求头:
$HTTP服务将会给所有请求自动创建HTTP头。这个默认设置能完全的通过访问$httpProvider.defaults.headers配置对象配置。目前包含默认配置:
$httpProvider.defaults.headers.common
//-- Accept:application/json,text/plain
$httpProvider.defaults.headers.post
//-- Content-Type:application/json
$httpProvider.defaults.headers.put
//-- Content-Type:application/json
添加或覆盖这些默认值
添加或删除这些配置对象的属性。
全局配置:
$httpProvider.defaults.headers.post = {“my-header”:”value”}
单请求配置:
$http({
method:”POST”,
url:”url”,
headers:{
“Content-Type”:” // your config”
},
data:{ data: ” // your data” }
})
重写每个请求的默认转换。
下面的代码演示添加一个新的响应体转换,在运行后的默认响应体转换。
Function appendTransform(defaults,transform){
defaults:angular.isArray(defaults)?defaults:[defaults];
return defaults.concat(transform);
}
$http({
url:”url”,
method:”GET”,
transformResponse:appendTransform($http.defaults.transformResponse,function(){
return doTransform(value);
})
})
设置http请求缓存。
$http.defaults.cache = true/false;
请求拦截
angular.module(“xxx”,[])
.config([“$httpProvider”,function($httpProvider){
$httpProvider.interceptors.push(“yourInterceptors”);
}])
.factory(“yourInterceptors”,[“$q”,”dependency”, function($q,dependency){
return {
“request”:function(config){
// do something on success
return config;
},
“requestError”:function(rejection){
// do something on error
If(canRecover(rejection)){
return responseOrNewPromise
}
return $q.reject(rejection);
},
“response”:function(response){
// do something on success
return response;
},
“responseError”:function(rejection){
// do something on error
If(canRecover(rejection)){
return responseOrNewPromise
}
return $q.reject(rejection);
}
};
}]);
依赖:$httpBackend $cacheFactory $rootScope $q $injector
使用:$http(config);
参数:
method:字符串,请求方法。
url:字符串,请求地址。
params:字符串或者对象,将使用paramserializer序列化并且作为GET请求的参数。
data:字符串或者对象,作为请求信息数据的数据。
headers:对象,字符串或者函数返回表示发送到服务器的HTTP请求头。如果函数的返回值为空,则headers则不发送。函数接受一个配置对象作为参数。
xsrfHeaderName:字符串,填充XSRF令牌的HTTP请求头名称。
xsrfCookieName:字符串,含有XSRF令牌cookie的名字。
transformRequest:函数/函数的数组。转换函数或者一个包含转换函数的数组。转换函数获取http请求体和请求头,并且返回他们的转换后的数据(通常是序列化)。
transformResponse:函数/函数的数组。转换函数或者一个包含转换函数的数组。转换函数获取http响应体和响应头,并且返回他们的转换数据(通常是序列化)。
paramSerializer:字符串或者返回字符串的函数。用于编写请求参数(指定为对象)的字符串表示形式的函数。如果指令是字符串,那么将被解释为通过$injector注册的函数,这意味着你能通过注册服务方式创建你自己的序列化程序。默认的序列化是$httpParamSerializer;或者你可以使用$httpParamSerializerJQLike。
cache:boolean,如果为true,一个默认的$http缓存将被作为请求的缓存,否则如果存在一个用$cacheFactory创建的缓存实例,则将用于缓存。
timeout:数值,毫秒,超时则让请求中止。
withCredentials:boolean,是否设置withcredentials flag的XHR对象。查看更多信息的凭据。
responseType:字符串,响应头类型。
返回:
data:字符串或对象。变换函数变换后的响应体。
status:数值,响应的http状态码。
headers:函数,响应头的getter函数。
config:对象,用于生成请求的配置对象。
statusText:字符串,响应的HTTP状态文本。
方法:
get(url,[config]);
url:请求地址。
config:请求配置对象。
delete(url,[donfig]);
url:请求地址。
config:请求配置对象。
head(url,[config]);
url:请求地址。
config:请求配置对象。
jsonp(url,[config]);
url:请求地址。
config:请求配置对象。
post(url,data,[config]);
url:请求地址。
data:请求内容。
config:请求配置对象。
put(url,data,[config]);
url:请求地址。
data:请求内容。
config:请求配置对象。
patch(url,data,[config]);
url:请求地址。
data:请求内容。
config:请求配置对象。
属性:
pendingRequests
当前正在等待的请求的配置对象数组。主要是为了用于调试目的。
defaults
请求头配置默认属性。
$httpParamSerializerJQLike
Http参数序列化程序。序列化程序也将按字母顺序排序的参数。
使用代码:
(function () {
angular.module("Demo", [])
.controller("testCtrl",["$http", "$httpParamSerializerJQLike",testCtrl]);
function testCtrl($http, $httpParamSerializerJQLike){
var data = { id: 1, value: "hello" };//
$http({
method: "post",
data: data,//Form Data = {"id":1,"value":"hello"}
url: "/url",
headers: { "Content-Type": "application/x-www-form-urlencoded" }
}).success(function (d) { console.log(d); }).error(function(error){console.log(error);});
$http({
method: "post",
data: $httpParamSerializerJQLike(data),//Form Data 变成 id:1 value:hello url: "/url",
headers: { "Content-Type": "application/x-www-form-urlencoded" }
}).success(function(d){ console.log(d);}).error(function(error){ console.log(error);});
};
}());
请求除了$http,还有$resource,关于后者,后面再提,先说明下$http,在最后例子的2个$http请求的时候,还加了headers设置"Content-Type": "application/x-www-form-urlencoded",这是因为有些小伙伴提出请求没有Form Data,只有 Request Payload,那么当我们设置请求头的Content-Type值为application/x-www-form-urlencoded时,就能看见Form Data了。实测可行...
AngularJs $http 请求服务的更多相关文章
- (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...
- 关于Oracle报“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误
关于Oracle报“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误原因:listener.ora中没有指定监听服务器名. 如下是解决思路: 尝试1.通过重启服务的方式启动数 ...
- tomcat7 ajax请求服务中文乱码
在确保请求服务编码格式为utf-8的情况下,确保tomcat的配置 <Connector connectionTimeout="20000" port="8080& ...
- 【教程】【FLEX】#002 请求服务端数据(UrlLoader)
为什么Flex需要请求服务端读取数据,而不是自己读取? Flex 是一门界面语言,主要是做界面展示的,它能实现很多绚丽的效果,这个是传统Web项目部能比的. 但是它对数据库和文件的读写 没有良好的支持 ...
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
今天用PL/SQL连接虚拟机中的Oracle数据库,发现报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,也许你也遇到过,原因如下: oracle安装成功后,一直未停止 ...
- ***PHP请求服务curl以及json的解析
对于thinkphp框架,相信每一个php开发者都会有了解或者熟悉吧!前端很多都用的ajax的结合,前几天遇到了一个问题,就是请求另一个服务,也就是请求一个接口,然后对方返回一个json串,一开始对c ...
- Angularjs总结(七) 路由及请求服务等
define(['angular'], function (ng) { 'use strict'; var app = ng.module('index-module', ['ngCookies', ...
- 防止tab页重复的去请求服务端
直接看图吧. 左边是企业树,右边是依据企业变化的一个tab页 实现功能:1.我们希望假设选中的企业不变,我们在切换旁边五个tab页的时候,仅仅是第一次进去的时候请求server端.以下来回切换tab页 ...
- 请求服务(RequestService)
一个module中的web组件,负责将Service的结果按照适当的规范输出给前端.格式:http://server/moduleID/param0/param1/paramN/p.TYPE格式上包含 ...
- windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里. 也许你没 ...
随机推荐
- C/C++实践笔记_001Helloworld
1.void返回值为空,int返回值Linux c,c++中,Main函数可以返回也可以不返回,普通函数必须返回.C编译松散,很容易结果出错,C++编译严格一些,结果一般会正确C语言不返回不会报错,但 ...
- 页面跳转Transfer与Redirect的区别你知道吗?
一 前言 关于页面跳转的方式常用的应该就是,链接跳转,js跳转,Server.Tranfser和Response.Redirect 这几种,可是在Tranfser与Redirect之间用哪种更好(本文 ...
- SQL基础之数据库快照
1.认识快照 如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息.如果要认识快照的本质,那就要了解快照的工作原理.当我们执行t-sql创建快照后,此时就会创建一个或多 ...
- Android编译报Errors running builder 'Android Pre Compiler' on project 'XXX' java.lang.NullPointerException
编译android时,遇到报错:Errors occurred during the build.Errors running builder 'Android Pre Compiler' on pr ...
- iis7配置网站容易出现的问题(转)
来源: http://www.cnblogs.com/5426z/articles/4865022.html 1.64位操作系统 access数据库提示:未在本地计算机上注册"Microso ...
- 在Windows上将ReactNative集成到现有的Android项目
React Natvie的官方文档的 Integrating with Existing Apps 已经很详细地教我们如何将React Natvie集成到现在的Android项目.我根据官方文档的步骤 ...
- coursera 公开课 文本挖掘和分析(text mining and analytics) week 1 笔记
一.课程简介: text mining and analytics 是一门在coursera上的公开课,由美国伊利诺伊大学香槟分校(UIUC)计算机系教授 chengxiang zhai 讲授,公开课 ...
- AVL树插入操作实现
为了提高二插排序树的性能,规定树中的每个节点的左子树和右子树高度差的绝对值不能大于1.为了满足上面的要求需要在插入完成后对树进行调整.下面介绍各个调整方式. 右单旋转 如下图所示,节点A的平衡因子(左 ...
- Bete冲刺第二阶段
Bete冲刺第二阶段 今日工作: web: 修复了a版本中接口数据返回错误的问题.通知对数据表新增了几个字段.并且新增了一个通知查询的接口. ios: 修正网络连接bug 招募功能界面完成但是跳转问题 ...
- 转-Spring单例模式与线程安全
问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存 ...