angularjs有本身封装的ajax服务$http,因为用惯了jQuery的ajax,所以,自己封装了一下angularjs的$http,代码如下
rush:js;">
app.factory('dataFactory',function ($http,$q){
var factory = {};
factory.getlist = function(endpoint,method,headers,params) {
var defer = $q.defer();
if (method == 'GET') {
$http({
url: endpoint,method: "GET",headers: headers,params: params,}).success(function (data) {
defer.resolve(data);
}).
error(function (data,status,config) {
// defer.resolve(data);
defer.reject(data);
});
} else {
$http({
url: endpoint,method: method,data: params,config) {
// defer.resolve(data);
defer.reject(data);
});
}
return defer.promise;
};
return factory;
});
在controller中引入dataFactory和$http即可使用更方便的调用ajax,一般情况下headers为
rush:js;">
headers = {'Content-Type': 'application/json'};
然后调用
rush:js;">
dataFactory.getlist("/api/checkDuplicate",'GET',params).then(function(data) {
//success函数
},function(data){
//error函数
})
但是其中又一次在项目中,后台框架使用的是Struts框架,在一个Python中使用的很好的dataFactory,在这里的后台取不到数,最后发现是应为header设置不对,而且params的格式也不正确,可以把header修改为
rush:js;">
headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'};
上面dataFactory中else添加转换params代码:
rush:js;">
var param = function(obj) {
var query = '',name,value,fullSubName,subName,subValue,innerObj,i;
for(name in obj) {
value = obj[name];
if(value instanceof Array) {
for(i=0; i<value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(innerObj) + '&';
}
}
else if(value instanceof Object) {
for(subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(innerObj) + '&';
}
}
else if(value !== undefined && value !== null)
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
return query.length ? query.substr(0,query.length - 1) : query;
};
$http({
url: endpoint,data: p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>ms),con<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>) {
// defer.resolve(data);
defer.reject(data);
}); </pre>
只是个人觉得这个方式比较方便,记录下来,希望对大家的学习有所帮助,也希望大家多多支持编程之家。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。