268 lines
8.6 KiB
JavaScript
268 lines
8.6 KiB
JavaScript
|
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;
|
|||
|
this.extSuccessFunction = successFunction;
|
|||
|
/*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 (xhr) {
|
|||
|
let token = localStorage.getItem("JWT-Authorization");
|
|||
|
xhr.setRequestHeader('Authorization', "Bearer " + token);
|
|||
|
}
|
|||
|
/**
|
|||
|
* successFunction
|
|||
|
* @description successFunction
|
|||
|
* @param {Object} data the data object from the api return
|
|||
|
* @return {Object} data
|
|||
|
*/
|
|||
|
successFunction = function (data, callback) {
|
|||
|
debugger
|
|||
|
if (data && data.unauthorized == 401) {
|
|||
|
let href = location.href;
|
|||
|
localStorage.removeItem("JWT-Authorization");
|
|||
|
if (href.indexOf("localhost:5966") == -1) {
|
|||
|
location.href = "/login";
|
|||
|
} else {
|
|||
|
location.href = "login.html";
|
|||
|
}
|
|||
|
}
|
|||
|
if (callback) {
|
|||
|
callback(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("登入時間超時,請重新登入!");
|
|||
|
localStorage.removeItem("JWT-Authorization");
|
|||
|
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: (data) => this.successFunction(data, this.extSuccessFunction),
|
|||
|
error: this.errorFunction,
|
|||
|
complete: this.completeFunction,
|
|||
|
statusCode: {
|
|||
|
201: (data) => this.successFunction(data, this.extSuccessFunction),
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
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
|
|||
|
// }
|
|||
|
// });
|
|||
|
// }
|
|||
|
//};
|