UNPKG

landers.angular

Version:

landers.angular

139 lines (133 loc) 5.95 kB
;angular.module('Landers.angular') .provider('Ajax', function() { var provider = this; this.hosturl = ''; this.$get = ['$http', '$rootScope', '$q', function($http, $rootScope, $q){ var csrf_token; function Ajax() { var _debug, _loading, _headers; var _hosturl = provider.hosturl; var cancellers = []; var prevents = { error : false, error_once : false }; var build_url = function(url, params) { if (params) { url = Landers.url.qs.set(url, params); } var url_info = Landers.url.parse(url); return url_info.protocol ? url : _hosturl + url; }; this.setHosturl = function(hosturl){ _hosturl = hosturl; return this; } this.debug = function(is){ _debug = is !== false && is !== 0; return this; }; this.loading = function(is){ _loading = is === true || is === undefined; return this; }; this._get = function(method, url, params){ var that = this; url = build_url(url, params); var ret, config = {ignoreLoadingBar: !_loading}; var canceler = $q.defer(); cancellers.push(canceler); // 添加timeout设置为promise对象,才可以取消未完成的request请求 config.timeout = canceler.promise; switch (method.toLowerCase()) { case 'get' : ret = $http.get(url, config); break; // case 'delete': // ret = $http.delete(url, config); break; } ret.success(that.success).error(that.error) .finally(function(){cancellers.pop();}); _loading = _debug = false; return ret; }; this.get = function(url, params) { return this._get('get', url, params); }; this.delete = function(url, data){ return this._post('delete', url, data); }; this._post = function(method, url, xvar, params){ var that = this; url = build_url(url, params); // var data = angular.isString(xvar) || angular.isElement(xvar) ? Form.data(xvar) : xvar; var ret, data = xvar || {}; var config = {ignoreLoadingBar: !_loading, headers: {}}; //, withCredentials:true var csrf_token = $('meta[name=csrf-token]').attr('content'); if (csrf_token) config.headers['X-CSRF-TOKEN'] = csrf_token; if (_headers) { angular.extend(config.headers, _headers); _headers = null; } var canceler = $q.defer(); cancellers.push(canceler); // 添加timeout设置为promise对象,才可以取消未完成的request请求 config.timeout = canceler.promise; switch (method.toLowerCase()) { case 'post' : ret = $http.post(url, data, config); break; case 'put' : data['_method'] = 'put'; ret = $http.put(url, data, config); break; case 'delete': config.data = data; config.headers['Content-type'] = 'application/json;charset=utf-8'; ret = $http.delete(url, config); break; } ret.success(that.success).error(that.error) .finally(function(){cancellers.pop();}); _loading = _debug = false; return ret; }; this.withHeaders = function(headers){ _headers = headers; return this; }; this.post = function(url, xvar, params){ return this._post('post', url, xvar, params); }; this.put = function(url, data, params){ return this._post('put', url, data, params); }; this.success = function(rspn, code, header){ if (rspn.code == 1 && rspn.message) { Landers.msgbox(rspn); } }; this.error = function(rspn) { if (!angular.isObject(rspn)) { // console.log('无响应404'); rspn = { success : false, message : '' //'远程无响应或OPTION方法', }; } }; this.cancelAll = function(i){ if ( cancellers.length ) { var canceller; while (canceller = cancellers.pop()) { canceller.resolve("user cancelled"); } } }; } return { make:function(){ return new Ajax(); }, csrf_token:function(){ return csrf_token; } }; }]; });