286 lines
9.2 KiB
JavaScript
286 lines
9.2 KiB
JavaScript
layui.define(function(exports) {
|
|
var $ = layui.$;
|
|
var methods = {
|
|
POST_METHOD: 'POST',
|
|
DELETE_METHOD: 'DELETE',
|
|
PUT_METHOD: 'PUT',
|
|
GET_METHOD: 'GET'
|
|
};
|
|
|
|
/**
|
|
* 对象转form表单
|
|
* @param obj
|
|
* @returns {*}
|
|
*/
|
|
function objToForm(obj) {
|
|
var formStr = '';
|
|
for (var name in obj) {
|
|
if (formStr == undefined || formStr == null || formStr == '') {
|
|
formStr += name + '=' + obj[name];
|
|
} else {
|
|
formStr += '&' + name + '=' + obj[name];
|
|
}
|
|
}
|
|
return formStr;
|
|
}
|
|
|
|
/**
|
|
* 新增
|
|
* @param url
|
|
* @param dataObj
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function postJson(url, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
doAjax(url, methods.POST_METHOD, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback);
|
|
}
|
|
|
|
/**
|
|
* 删除
|
|
* @param url
|
|
* @param dataObj
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function deleteForm(url, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
doAjax(url, methods.DELETE_METHOD, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback);
|
|
}
|
|
|
|
/**
|
|
* 修改
|
|
* @param url
|
|
* @param dataObj
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function putJson(url, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
doAjax(url, methods.PUT_METHOD, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback);
|
|
}
|
|
|
|
/**
|
|
* 查询
|
|
* @param url
|
|
* @param dataObj
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function getForm(url, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
doAjax(url, methods.GET_METHOD, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback);
|
|
}
|
|
|
|
/**
|
|
* 执行上传
|
|
* @param url
|
|
* @param method
|
|
* @param dataObj
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function doAjax(url, method, dataObj, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
var ajaxData = (dataObj == undefined || dataObj == null) ? {} : dataObj;
|
|
if (methods.POST_METHOD == method || methods.PUT_METHOD == method) {
|
|
ajaxData = JSON.stringify(ajaxData);
|
|
} else {
|
|
ajaxData = objToForm(ajaxData);
|
|
dataObj.tm = new Date().getTime();
|
|
}
|
|
var headers = {};
|
|
if(args != null && typeof(args.headers) != 'undefined' && args.headers != null) {
|
|
headers = args.headers;
|
|
}
|
|
$.ajax({
|
|
url: url,
|
|
type: method,
|
|
contentType: "application/json;charset=utf-8",
|
|
headers: headers,
|
|
data: ajaxData,
|
|
success: function (data, status, XMLHttpRequest) {
|
|
var responseCode = XMLHttpRequest.status;
|
|
successCallback(responseCode, data, args);
|
|
},
|
|
error: function (XMLHttpRequest) {
|
|
var responseCode = XMLHttpRequest.status;
|
|
var responseData = JSON.parse(XMLHttpRequest.responseText);
|
|
if (errorCallback != undefined && errorCallback != null && typeof(errorCallback) == 'function') {
|
|
errorCallback(responseCode, responseData);
|
|
}
|
|
},
|
|
beforeSend: function (XMLHttpRequest) {
|
|
if (beforeCallback != undefined && beforeCallback != null && typeof(beforeCallback) == 'function') {
|
|
beforeCallback(XMLHttpRequest);
|
|
}
|
|
},
|
|
complete: function (XMLHttpRequest, status) {
|
|
if (completeCallback != undefined && completeCallback != null && typeof(completeCallback) == 'function') {
|
|
completeCallback(XMLHttpRequest, status);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 检测是路径参数有重复值
|
|
* @param pathArgArray
|
|
* @returns {boolean}
|
|
*/
|
|
function pathArgsHasSameValue(pathArgArray) {
|
|
var tempArgIndex = 0;
|
|
var tempArgs = pathArgArray[tempArgIndex];
|
|
for (var i = (tempArgIndex + 1), item; item = pathArgArray[i]; i++) {
|
|
if (tempArgs == item) {
|
|
throw new Error('参数' + item + '有重复值!!!');
|
|
}
|
|
if (i == pathArgArray.length - 1) {
|
|
tempArgs = pathArgArray[++tempArgIndex];
|
|
i = tempArgIndex;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取页面间传递的参数
|
|
* @param url
|
|
*/
|
|
function getParamsArg(url) {
|
|
var params = url.split('?')[1];
|
|
var paramsObj = {};
|
|
if (typeof(params) == 'undefined' || params == null) {
|
|
return paramsObj;
|
|
}
|
|
var paramsKVs = params.split('&');
|
|
for (var i = 0, item = null; item = paramsKVs[i++];) {
|
|
var kvs = item.split('=');
|
|
if (kvs.length == 1) {
|
|
paramsObj[kvs[0]] = null;
|
|
}
|
|
if (kvs.length == 2) {
|
|
paramsObj[kvs[0]] = decodeURI(kvs[1]);
|
|
}
|
|
}
|
|
return paramsObj;
|
|
}
|
|
|
|
/**
|
|
* 构建路径
|
|
* @param basePath 请求路径,{参数},
|
|
* @param pathArgs 替换的路径参数,不能重复
|
|
* @returns {*}
|
|
*/
|
|
function buildPath(basePath, pathArgs) {
|
|
var path = basePath;
|
|
if (!basePath || !(typeof(basePath) == 'string')) {
|
|
throw new Error('basePath必须为字符串!!!');
|
|
}
|
|
if (!pathArgs || !Array.isArray(pathArgs)) {
|
|
throw new Error('pathArgs必须为数组!!!');
|
|
}
|
|
var pathArgArray = basePath.match(/\{\w+\}/g);
|
|
if (!pathArgArray) {
|
|
return path;
|
|
}
|
|
pathArgsHasSameValue(pathArgArray);
|
|
for (var i = 0, item; item = pathArgArray[i]; i++) {
|
|
path = path.replace(item, pathArgs[i]);
|
|
}
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* 通过form对象上传文件
|
|
* @param url
|
|
* @param formData
|
|
* @param args
|
|
* @param successCallback
|
|
* @param errorCallback
|
|
* @param beforeCallback
|
|
* @param completeCallback
|
|
*/
|
|
function postFile(url, formData, args, successCallback, errorCallback, beforeCallback, completeCallback) {
|
|
$.ajax({
|
|
url: url,
|
|
type: 'POST',
|
|
data: formData,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (data, status, XMLHttpRequest) {
|
|
var responseCode = XMLHttpRequest.status;
|
|
successCallback(responseCode, data, args);
|
|
},
|
|
error: function (XMLHttpRequest) {
|
|
var responseCode = XMLHttpRequest.status;
|
|
var responseData = JSON.parse(XMLHttpRequest.responseText);
|
|
if (errorCallback != undefined && errorCallback != null && typeof(errorCallback) == 'function') {
|
|
errorCallback(responseCode, responseData);
|
|
}
|
|
},
|
|
beforeSend: function (XMLHttpRequest) {
|
|
if (beforeCallback != undefined && beforeCallback != null && typeof(beforeCallback) == 'function') {
|
|
beforeCallback(XMLHttpRequest);
|
|
}
|
|
},
|
|
complete: function (XMLHttpRequest, status) {
|
|
if (completeCallback != undefined && completeCallback != null && typeof(completeCallback) == 'function') {
|
|
completeCallback(XMLHttpRequest, status);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* xss 转义
|
|
* @param html
|
|
* @returns {string}
|
|
*/
|
|
function escape(html) {
|
|
return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
|
|
.replace(/</g, '<').replace(/>/g, '>')
|
|
.replace(/'/g, ''').replace(/"/g, '"');
|
|
}
|
|
|
|
function checkBoxToString(formObj, checkBoxKey) {
|
|
var value = '';
|
|
for(var key in formObj) {
|
|
if(key.indexOf(checkBoxKey) != 0) {
|
|
continue;
|
|
}
|
|
if(value !== '') {
|
|
value += ',';
|
|
}
|
|
if(key.indexOf('[') < 0 || key.indexOf(']') < 0) {
|
|
continue;
|
|
}
|
|
value += key.substring(checkBoxKey.length + 1, key.length - 1);
|
|
delete formObj[key];
|
|
}
|
|
return value;
|
|
}
|
|
|
|
exports('restajax', {
|
|
post: postJson,
|
|
postFile: postFile,
|
|
delete: deleteForm,
|
|
put: putJson,
|
|
get: getForm,
|
|
params: getParamsArg,
|
|
path: buildPath,
|
|
escape: escape,
|
|
checkBoxToString: checkBoxToString
|
|
});
|
|
}); |