angularjs封装$http为factory的方法
程序员文章站
2022-04-09 12:49:08
angularjs有本身封装的ajax服务$http,因为用惯了jquery的ajax,所以,自己封装了一下angularjs的$http,代码如下
app....
angularjs有本身封装的ajax服务$http,因为用惯了jquery的ajax,所以,自己封装了一下angularjs的$http,代码如下
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, 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); }); } return defer.promise; }; return factory; });
在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代码:
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 += param(innerobj) + '&'; } } else if(value instanceof object) { for(subname in value) { subvalue = value[subname]; fullsubname = name + '[' + subname + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(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, method: method, headers: headers, data: param(params), }).success(function (data) { defer.resolve(data); }). error(function (data, status, headers, config) { // defer.resolve(data); defer.reject(data); });
只是个人觉得这个方式比较方便,记录下来,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
-
AngularJS的ng Http Request与response格式转换方法
-
Angularjs中$http以post请求通过消息体传递参数的实现方法
-
详解为新版Apache服务器开启HTTP/2支持的方法
-
详解AngularJS中$http缓存以及处理多个$http请求的方法
-
AngularJS下$http服务Post方法传递json参数的实例
-
详解为Angular.js内置$http服务添加拦截器的方法
-
简介AngularJS中使用factory和service的方法
-
AngularJS基于factory创建自定义服务的方法详解
-
解决angularjs中同步执行http请求的方法