angularjs封装$http为factory的方法
angularjs有本身封装的ajax服务$http,因为用惯了jQuery的ajax,所以,自己封装了一下angularjs的$http,代码如下
app.factory('dataFactory',function($http,$q){
varfactory={};
factory.getlist=function(endpoint,method,headers,params){
vardefer=$q.defer();
if(method=='GET'){
$http({
url:endpoint,
method:"GET",
headers:headers,
params:params,
}).success(function(data){
defer.resolve(data);
}).
error(function(data,status,headers,config){
//defer.resolve(data);
defer.reject(data);
});
}else{
$http({
url:endpoint,
method:method,
headers:headers,
data:params,
}).success(function(data){
defer.resolve(data);
}).
error(function(data,status,headers,config){
//defer.resolve(data);
defer.reject(data);
});
}
returndefer.promise;
};
returnfactory;
});
在controller中引入dataFactory和$http即可使用更方便的调用ajax,一般情况下headers为
headers={'Content-Type':'application/json'};
params为一个json字符串
然后调用
dataFactory.getlist("/api/checkDuplicate",'GET',headers,params).then(function(data){
//success函数
},function(data){
//error函数
})
但是其中又一次在项目中,后台框架使用的是Struts框架,在一个Python中使用的很好的dataFactory,在这里的后台取不到数,最后发现是应为header设置不对,而且params的格式也不正确,可以把header修改为
headers={'Content-Type':'application/x-www-form-urlencoded;charset=utf-8'};
上面dataFactory中else添加转换params代码:
varparam=function(obj){
varquery='',name,value,fullSubName,subName,subValue,innerObj,i;
for(nameinobj){
value=obj[name];
if(valueinstanceofArray){
for(i=0;i
只是个人觉得这个方式比较方便,记录下来,希望对大家的学习有所帮助,也希望大家多多支持毛票票。