angularjs封裝$http為factory的方法
angularjs有本身封裝的ajax服務(wù)$http,因?yàn)橛脩T了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即可使用更方便的調(diào)用ajax,一般情況下headers為
headers = {'Content-Type': 'application/json'};
params為一個(gè)json字符串
然后調(diào)用
dataFactory.getlist("/api/checkDuplicate", 'GET', headers, params).then(function(data) {
//success函數(shù)
},function(data){
//error函數(shù)
})
但是其中又一次在項(xiàng)目中,后臺(tái)框架使用的是Struts框架,在一個(gè)Python中使用的很好的dataFactory,在這里的后臺(tái)取不到數(shù),最后發(fā)現(xiàn)是應(yīng)為header設(shè)置不對(duì),而且params的格式也不正確,可以把header修改為
headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'};
上面dataFactory中else添加轉(zhuǎn)換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);
});
只是個(gè)人覺得這個(gè)方式比較方便,記錄下來,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談angular.js中實(shí)現(xiàn)雙向綁定的方法$watch $digest $apply
Angular用戶都想知道數(shù)據(jù)綁定是怎么實(shí)現(xiàn)的。你可能會(huì)看到各種各樣的詞匯:$watch,$apply,$digest它們是如何工作的呢?這里我想回答這些問題,其實(shí)它們?cè)诠俜降奈臋n里都已經(jīng)回答了,但是我還是想把它們結(jié)合在一起來講2015-10-10
詳解基于Bootstrap+angular的一個(gè)豆瓣電影app
本篇文章主要介紹了基于Bootstrap+angular的一個(gè)豆瓣電影app ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06
解決angular雙向綁定無效果,ng-model不能正常顯示的問題
今天小編就為大家分享一篇解決angular雙向綁定無效果,ng-model不能正常顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
BootStrap+Angularjs+NgDialog實(shí)現(xiàn)模式對(duì)話框
在完成一個(gè)后臺(tái)管理系統(tǒng)時(shí),需要用表格顯示注冊(cè)用戶的信息。但是用戶地址太長(zhǎng)了,不好顯示。所以想做一個(gè)模式對(duì)話框,點(diǎn)擊詳細(xì)地址按鈕時(shí),彈出對(duì)話框,顯示地址。下面小編給大家分享下實(shí)現(xiàn)方法,一起看下吧2016-08-08
Angular.js中window.onload(),$(document).ready()的寫法淺析
這篇文章主要介紹了Angular.js中window.onload(),$(document).ready()的寫法淺析,需要的朋友可以參考下2017-09-09
淺談Angular HttpClient簡(jiǎn)單入門
本篇文章主要介紹了淺談Angular HttpClient 簡(jiǎn)單入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
AngularJS開發(fā)教程之控制器之間的通信方法分析
這篇文章主要介紹了AngularJS開發(fā)教程之控制器之間的通信方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了AngularJS控制器之間通信的三種常用方式及相關(guān)使用技巧,需要的朋友可以參考下2016-12-12

