angularjs有本身封裝的ajax服務$http,因為用慣了jQuery的ajax,所以,自己封裝了一下angularjs的$http,代碼如下 [javascript] view plain copy 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字符串 然后調用 [javascript] view plain copy 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代碼: [javascript] view plain copy 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); }); 只是個人覺得這個方式比較方便,記錄下來,分享一下,請多多指教。