ajax二次封装
## onion.ajax
### 功能
发送 ajax 请求
### 使用场景
1. GET 请求
```js
onion.ajax.get(url, params, function (res) {
if(res.code == onion.networkState.SUCC){
callback && callback(res.data)
}else{
callback && callback(false);
}
})
```
2. POST 请求
```js
onion.ajax.post(url, params, function (res) {
if(res.code == onion.networkState.SUCC){
callback && callback(res.data)
}else{
callback && callback(false);
}
})
```
3. 带有文件上传的 POST 请求
```js
onion.ajax.minPost(url, formData, function (res) {
if (res.code == onion.networkState.SUCC) {
// 成功操作
} else {
// 失败操作
}
})
```
### 如何使用
url, params, callback 分别为 接口地址, 发送参数, 回调函数
1. onion.ajax.get(url, params, callback, headData)
接收需要进行 GET 请求的数据, 请求结果在回调函数中操作, headData 为自定义请求头 (以对象形式传参) , 没有则不操作请求头
2. onion.ajax.post(url, params, callback, status)
接收需要进行 POST 请求的数据, 请求结果在回调函数中操作, status 为是否为异步请求, 默认为true, 即不会等待ajax请求返回的结果,会直接执行ajax后面的语句
3. onion.ajax.minPost(url, data, callback, headData, status)
接收需要进行有文件上传需求的 POST 请求的数据, 请求结果在回调函数中操作, headData, status 传参同上, **注意所传的 data 必须为 formData 格式**
### api定义
``` javascript
// ajax二次封装
function MyAjax() {};
/**
* @desc GET 请求方式
*
* @params [string] url
* @params [object] 数据
* @params [function] 回调
*
* */
MyAjax.prototype.get = function (url, data, callback, headData) {
url = onionUrl + url;
if (!onion.help.isFunction(data)) {
if (onion.help.isObject(data)) {
var str = '';
for (var key in data) {
var temp = key + '=' + data[key];
str += temp + '&';
}
str = str.substr(0, str.length - 1);
url += '?' + str;
}
} else {
var callback = data;
}
$.ajax({
type: 'GET',
url: url,
cache: true,
dataType: 'json',
beforeSend: function (request) {
if (!headData) return;
for (var key in headData) {
request.setRequestHeader(key, JSON.stringify(headData[key]));
}
},
success: function (res) {
onion.log.setLog(url, res);
if (res.code == onion.networkState.NOTAUTH) {
// 没有权限,应该退出登录
onion.leave();
return;
}
callback && callback(res);
},
error: function (err) {
callback && callback(err);
}
})
};
/**
* @desc POST
*
* @params url [string]
* @params data [object]
* @params callback [function] 回调
*
* */
MyAjax.prototype.post = function (url, data, callback, status) {
var url = onionUrl + url;
if (onion.help.isObject(data) || onion.help.isArray(data)) {
var data = JSON.stringify(data);
} else if (onion.help.isFormData(data)) {
var data = data;
} else {
callback = data;
var data = JSON.stringify({})
}
$.ajax({
type: 'POST',
url: url,
data: data,
async: !status || status,
dataType: 'json',
contentType: "application/json",
success: function (res) {
onion.log.setLog(url, res);
if (res.code == onion.networkState.NOTAUTH) {
// 没有权限,应该退出登录
onion.leave();
return;
}
callback && callback(res);
},
error: function (err) {
callback && callback(err);
}
})
}
// 用于表单formData的提交
/**
*
* eg: onion.ajax.minPost('onio')
*
* 备注:用于处理 通过FormData上传数据的方式
*
* */
// 上传文件
MyAjax.prototype.minPost = function (url, data, callback, headData, status) {
var url = onionUrl + url;
if (onion.help.isObject(data) || onion.help.isArray(data)) {
var data = JSON.stringify(data);
} else if (onion.help.isFormData(data)) {
var data = data;
} else {
callback = data;
var data = JSON.stringify({})
}
$.ajax({
type: 'POST',
url: url,
data: data,
dataType: 'json',
async: !status || status,
processData: false,
beforeSend: function (request) {
if (!headData) return;
for (var key in headData) {
request.setRequestHeader(key, JSON.stringify(headData[key]));
}
},
contentType: false,
success: function (res) {
if (res.code == onion.networkState.NOTAUTH) {
// 没有权限,应该退出登录
onion.leave();
return;
}
callback && callback(res);
},
error: function (err) {
//console.log(err);
callback && callback(err);
}
})
}
onion.ajax = new MyAjax();
```