ibms-dome/Frontend/js/yourteam/yourteam.ajax.class.js

251 lines
7.8 KiB
JavaScript
Raw Normal View History

2022-11-15 12:59:27 +08:00
var YourTeam = YourTeam || {};
/**
* This is a description of the Ajax constructor function.
* @class Ajax
* @classdesc This is a description of the Ajax class.
* @author Darren Chen @2021/02/06
* @copyright Darren Chen @Your Team Co., Ltd. 2021
*/
class Ajax {
/**
* constructor
* @constructor
* @param {String} apiUrl API URL. def="".
* @param {String} sendData the data object which you will be send. def= null.
* @param {Fcnction} successFunction successFunction. def=null.(use def successFunction)
* @param {Fcnction} errorFunction errorFunction. def=null.(use def successFunction)
* @param {String} type HTTP METHOD. def="GET".
* @param {Object} conType content type
* @param {String} dataType data format. def="JSON".
* @param {String} isAsync the api synchronization. def=false.
* @return {Object} this
*/
constructor(apiUrl = "", sendData = null, successFunction = null, errorFunction = null, type = "GET", isAsync = false, conType = this.contentType.Json, dataType = "JSON") {
this.conType = conType;
this.apiUrl = apiUrl;
this.isAsync = isAsync;
this.type = type;
this.dataType = dataType;
this.sendData = sendData;
if (successFunction) this.successFunction = successFunction;
if (errorFunction) this.errorFunction = errorFunction;
return this;
}
/**
* dataToString
* @description convert the data object to string
* @param {Object} data API URL. def="".
* @return {String} strJsonData
*/
dataToString = function (data) {
let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
return strJsonData;
}
/**
* beforeSendFunction
* @description beforeSendFunction
*/
beforeSendFunction = function () {
}
/**
* successFunction
* @description successFunction
* @param {Object} data the data object from the api return
* @return {Object} data
*/
successFunction = function (data) {
return data;
}
/**
* errorFunction
* @description errorFunction
* @param {Object} xhr HTTP STATUS
* @param {Object} ajaxOptions the ajax option message
* @param {String} thrownError the error message
*/
errorFunction = function (xhr, ajaxOptions, thrownError) {
if (xhr.status != "201" && xhr.status != "204") {
console.log(xhr.status);
console.log(thrownError);
window.alert("執行失敗,請聯絡客服人員。");
} else if (xhr.status == "401") {
window.alert("登入時間超時,請重新登入!");
location.href = "~/Login/Login";
}
}
/**
* completeFunction
* @description completeFunction
*/
completeFunction = function () {
}
/**
* content type
* @description content type
*/
contentType = {
Json: 1,
FormData : 2
}
/**
* enum
* @description enum
* @param {Object} eo object
* @return {Object} enum
*/
enums(eo) {
var enums = function () { };
for (var key in eo) {
var enumObject = new enums();
enums[key] = eo[key];
}
return enums;
}
/**
* send
* @description send
* @param {Object} conType content type
* @param {Object} sendData send data
* @param {Function} successFunction the ajax success function
* @param {Function} errorFunction the ajax error function
* @return {Object} this
*/
send = function (conType = this.contentType.Json, sendData = null, successFunction = null, errorFunction = null) {
if (!CheckMultiSend(this.apiUrl, this.type, this.dataToString(this.sendData))) { //連點防呆
return false;
}
if (sendData) {
this.sendData = sendData;
}
if (successFunction) {
this.successFunction = successFunction;
}
if (errorFunction) {
this.errorFunction = errorFunction;
}
if (conType === this.contentType.Json) {
$.ajax({
url: this.apiUrl,
async: this.isAsync,
type: this.type,
dataType: this.dataType,
traditional: true,
contentType: "application/json; charset=utf-8",
data: this.dataToString(this.sendData),
//cache: false,
//processData: false,
beforeSend: this.beforeSendFunction,
success: this.successFunction,
error: this.errorFunction,
complete: this.completeFunction,
statusCode: {
201: this.successFunction
}
});
}
else if (conType === this.contentType.FormData) {
$.ajax({
url: this.apiUrl,
async: this.isAsync,
type: this.type,
dataType: this.dataType,
traditional: true,
contentType: false,
enctype: 'multipart/form-data',
data: this.sendData,
cache: false,
processData: false,
beforeSend: this.beforeSendFunction,
success: this.successFunction,
error: this.errorFunction,
complete: this.completeFunction
});
alert(conType);
}
else {
console.error("the content type is null.");
}
return this;
}
}
YourTeam.Ajax = YourTeam.Ajax || Ajax;
var ckeckMultiSendArr = [];
function CheckMultiSend(url, type, data) {
//根據 url type data
let text = String(url) + String(type);
if (type != "GET") {
if (ckeckMultiSendArr.indexOf(text) == -1) {
ckeckMultiSendArr.unshift(text);
let timer = setInterval(function () {
ckeckMultiSendArr.splice(0);
clearInterval(timer);
}, 500)
} else {
return false
}
}
return true;
}
//var YourTeamAjax = {
// apiUrl: "",
// isAsync: false,
// type: "GET",
// dataType: "JSON",
// sendData: null,
// dataToString: function (data) {
// let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
// return strJsonData;
// },
// beforeSendFunction: function () {
// $.blockUI({ message: '<h1><img src="/Content/img/loading.gif" style="width:200px;" /> Loding...</h1>' });
// },
// successFunction: function (data) {
// return data;
// },
// errorFunction: function (xhr, ajaxOptions, thrownError) {
// if (xhr.status != "201") {
// console.log(xhr.status);
// console.log(thrownError);
// window.alert("執行失敗請聯絡YourTeam客服人員。");
// }
// },
// completeFunction: function () {
// $.unblockUI();
// },
// send: function (sendData = null, successFunction = null, errorFunction = null) {
// if (sendData) {
// this.sendData = sendData;
// }
// if (successFunction) {
// this.successFunction = successFunction;
// }
// if (errorFunction) {
// this.errorFunction = errorFunction;
// }
// $.ajax({
// url: this.apiUrl,
// async: this.isAsync,
// type: this.type,
// dataType: this.dataType,
// traditional: true,
// contentType: "application/json; charset=utf-8",
// data: this.dataToString(this.sendData),
// beforeSend: this.beforeSendFunction,
// success: this.successFunction,
// error: this.errorFunction,
// complete: this.completeFunction,
// statusCode: {
// 201: this.successFunction
// }
// });
// }
//};