170 lines
5.0 KiB
JavaScript
170 lines
5.0 KiB
JavaScript
import Ember from 'ember';
|
|
import $ from 'jquery';
|
|
|
|
export default Ember.Service.extend({
|
|
/**
|
|
* Ajax.doGet('url.get',
|
|
* {id: 001, name: 'foo'},
|
|
* function(data) {
|
|
* // success
|
|
* }, function(msg) {
|
|
* // fail
|
|
* });
|
|
* no params
|
|
* Ajax.doGet('url.get',
|
|
* function(data) {
|
|
* // success
|
|
* }, function(msg){
|
|
* // fail
|
|
* });
|
|
* @param {Boolean} [loadmask], option
|
|
* @param {String} url
|
|
* @param {Object} [params]
|
|
* @param {Function} [fnSucc]
|
|
* @param {Function} [fnFail]
|
|
*/
|
|
doGet() {
|
|
this._process_request(arguments, 'GET');
|
|
},
|
|
/**
|
|
* @see #get
|
|
*/
|
|
doPost() {
|
|
this._process_request(arguments, 'POST');
|
|
},
|
|
/**
|
|
* @see #get
|
|
*/
|
|
doPut() {
|
|
this._process_request(arguments, 'PUT');
|
|
},
|
|
/**
|
|
* @see #get
|
|
*/
|
|
doDel() {
|
|
this._process_request(arguments, 'DELETE');
|
|
},
|
|
/**
|
|
* private
|
|
*/
|
|
_request(p) {
|
|
var me = this;
|
|
p.loadmask && me.set('loading', true);
|
|
var formDataCfg;
|
|
if (p.params instanceof FormData) {
|
|
formDataCfg = false;
|
|
}
|
|
|
|
$.ajax({
|
|
url: p.url,
|
|
data: p.params,
|
|
type: (/get/i).test(p.method) ? 'GET' : 'POST',
|
|
contentType: formDataCfg,
|
|
processData: formDataCfg,
|
|
success(r, status, resp) {
|
|
if (r.success) {
|
|
// ignore success callback
|
|
if (p.fnSucc !== false) {
|
|
let keys = Object.keys(r);
|
|
me._isFunc(p.fnSucc) ?
|
|
p.fnSucc(keys.length === 3 &&
|
|
keys.includes('data') ? r.data : r) :
|
|
me.message.alert(r.data || 'Ajax Request Successfully');
|
|
}
|
|
}
|
|
else if (r.errcode === 4011) {
|
|
// $.trigger('NOT_LOGIN', true);
|
|
Ember.getOwner(me).lookup('route:application').transitionTo('login');
|
|
}
|
|
// ignore fail callback
|
|
else if (p.fnFail !== false) {
|
|
me._isFunc(p.fnFail) ? p.fnFail(r.errmsg, r) :
|
|
me.dialog.error(r.errmsg || 'Ajax Request Error Caused');
|
|
}
|
|
else {
|
|
me.dialog.error(r.errmsg || 'Ajax Request Error Caused');
|
|
}
|
|
p.loadmask && me.set('loading', false);
|
|
},
|
|
error(jqXHR, textStatus) {
|
|
Ember.Logger.error('Ajax Request Error Caused', arguments);
|
|
if (textStatus === 'timeout') {
|
|
me.dialog.error('Ajax Request Timeout Error Caused.');
|
|
}
|
|
else if (textStatus === 'abort') {
|
|
me.dialog.error('Ajax Request Client Abort Error Caused.');
|
|
}
|
|
else {
|
|
me.dialog.error('Ajax Request Error Caused.');
|
|
}
|
|
p.loadmask && me.set('loading', false);
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* {
|
|
* [lm], [url], [params], [fnSucc], [fnFail]
|
|
* }
|
|
*/
|
|
_process_request(args, method) {
|
|
var me = this;
|
|
if (args && args.length) {
|
|
// args to array
|
|
args = Array.prototype.slice.call(args);
|
|
var lm = args.shift(), // loadmask
|
|
url,
|
|
p,
|
|
fnSucc,
|
|
fnFail;
|
|
// loadmask
|
|
if ($.type(lm) === 'boolean') {
|
|
url = args.shift();
|
|
}
|
|
else {
|
|
url = lm;
|
|
// default loadmask
|
|
lm = true;
|
|
}
|
|
me._parse_params_and_callbacks(args);
|
|
// params
|
|
p = args.shift();
|
|
// callbacks
|
|
fnSucc = args.shift();
|
|
fnFail = args.shift();
|
|
// Ajax Request
|
|
me._request({
|
|
loadmask: lm,
|
|
method: method || 'GET',
|
|
url: url,
|
|
params: p,
|
|
fnSucc: fnSucc,
|
|
fnFail: fnFail
|
|
});
|
|
}
|
|
else {
|
|
console.error('Ajax No Args Given.');
|
|
}
|
|
},
|
|
/**
|
|
* params, fnSucc, fnFail
|
|
* fnSucc, fnFail
|
|
* fnFail
|
|
*/
|
|
_parse_params_and_callbacks(args) {
|
|
// has callbacks
|
|
if (this._isFunc(args[1]) && this._isFunc(args[2])) {
|
|
this._isFunc(args[0]) && (args[0] = args[0]());
|
|
}
|
|
// no params, params is success callback
|
|
else if (this._isFunc(args[0])) {
|
|
args[2] = args[1];
|
|
args[1] = args[0];
|
|
args[0] = null;
|
|
}
|
|
},
|
|
_isFunc(f) {
|
|
return $.type(f) === 'function';
|
|
}
|
|
});
|
|
|