mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
119 lines
2.8 KiB
JavaScript
119 lines
2.8 KiB
JavaScript
import MIMETypeUtils from './MIMETypeUtils';
|
|
|
|
/**
|
|
* ajax
|
|
* @author tengge / https://github.com/tengge1
|
|
* @param {*} params 参数
|
|
*/
|
|
function ajax(params) {
|
|
const url = params.url || '';
|
|
const method = params.method || 'GET';
|
|
const data = params.data || null;
|
|
const callback = params.callback || null;
|
|
|
|
const xhr = new XMLHttpRequest();
|
|
xhr.open(method, url, true);
|
|
xhr.onreadystatechange = function () {
|
|
if (xhr.readyState === 4) {
|
|
var data = xhr.responseText;
|
|
typeof (callback) === 'function' && callback(data);
|
|
}
|
|
}
|
|
|
|
if (data === null) { // 不需要POST数据
|
|
xhr.send(null);
|
|
return;
|
|
}
|
|
|
|
// 判断是发送表单还是上传文件
|
|
// 由于API Controller只能序列化Content-Type为`application/x-www-form-urlencoded`的数据,所以发送表单和上传文件只能二选一。
|
|
// 否则报错:"No MediaTypeFormatter is available to read an object of type 'EditTextureModel' from content with media type 'multipart/form-data'.
|
|
var hasFile = false;
|
|
|
|
for (var name in data) {
|
|
if (data[name] instanceof Blob) {
|
|
hasFile = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (hasFile) { // 上传文件
|
|
var formData = new FormData();
|
|
|
|
for (var name in data) {
|
|
if (data[name] instanceof Blob) {
|
|
formData.append(name, data[name], `${data[name].name}.${MIMETypeUtils.getExtension(data[name].type)}`);
|
|
}
|
|
}
|
|
|
|
xhr.send(formData);
|
|
} else { // 发送表单
|
|
var bodies = [];
|
|
for (var name in data) {
|
|
bodies.push(name + '=' + encodeURIComponent(data[name]));
|
|
}
|
|
|
|
var body = bodies.join('&');
|
|
if (body.length) {
|
|
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
|
}
|
|
|
|
xhr.send(body);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* get请求
|
|
* @param {*} url 地址
|
|
* @param {*} callback 回调函数
|
|
*/
|
|
function get(url, callback) {
|
|
ajax({
|
|
url: url,
|
|
callback: callback
|
|
});
|
|
}
|
|
|
|
/**
|
|
* get请求并解析json数据
|
|
* @param {*} url
|
|
* @param {*} callback
|
|
*/
|
|
function getJson(url, callback) {
|
|
ajax({
|
|
url: url,
|
|
callback: function (data) {
|
|
typeof (callback) === 'function' && callback(JSON.parse(data));
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* post请求
|
|
* @param {*} url 地址
|
|
* @param {*} data 数据
|
|
* @param {*} callback 回调函数
|
|
*/
|
|
function post(url, data, callback) {
|
|
const _data = typeof (data) === 'function' ? null : data;
|
|
const _callback = typeof (data) === 'function' ? data : callback;
|
|
|
|
ajax({
|
|
url: url,
|
|
method: 'POST',
|
|
data: _data,
|
|
callback: _callback
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Ajax
|
|
*/
|
|
const Ajax = {
|
|
ajax: ajax,
|
|
get: get,
|
|
getJson: getJson,
|
|
post: post
|
|
};
|
|
|
|
export default Ajax; |