关注微信公众号:每日玩机 获取ios、Android、tv、mac黑科技软件
新建一个ts文件
module Http {
export function Post(uri: string, params: Object = {}, successCallBack: Function, needToken = true) {
var request = new egret.HttpRequest();
request.responseType = egret.HttpResponseType.TEXT;
//设置为 POST 请求
request.open(Config.BASE_URL + uri, egret.HttpMethod.POST); //Config.BASE_URL换成自己的服务器地址
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
if (needToken) {
request.setRequestHeader("token", Config.token);
}
// 调用querify处理并绑定传送到服务器的数据
let str = querify(params);
request.send(str);
request.addEventListener(egret.Event.COMPLETE, (event: egret.Event) => {
var request = <egret.HttpRequest>event.currentTarget;
let result = JSON.parse(request.response);
successCallBack(result);
}, this);
}
export function Get(uri: string, successCallBack: Function, needToken = true) {
var request = new egret.HttpRequest();
request.responseType = egret.HttpResponseType.TEXT;
//设置为 GET 请求
request.open(Config.BASE_URL + uri, egret.HttpMethod.GET); //Config.BASE_URL换成自己的服务器地址
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
if (needToken) {
request.setRequestHeader("token", Config.token);
}
request.send();
request.addEventListener(egret.Event.COMPLETE, (event: egret.Event) => {
var request = <egret.HttpRequest>event.currentTarget;
let result = JSON.parse(request.response);
successCallBack(result);
}, this);
}
//数据处理
function querify(object = {}) {
const keys = Object.keys(object);
const result = keys.reduce((prev, current) => {
prev += `&${current}=${object[current]}`;
return prev;
}, '').slice(1);
return result;
}
}
具体使用方法如下:
Http.Post("user/login", {
//需要传输的数据,如下
// open_id: openid,
}, (res) => {
console.log(res)
}, false);
Http.Get("user/index", (res) => {
console.log(res)
}, false);
如果是微信小程序请求的话,需在微信公众平台去配置请求地址,方法如下:具体官方文档
如果是发布Android项目 ,可能会遇到请求成功,但是数据仍是请求之前的数据,这是因为egret的http有缓存。
解决办法:
修改文件中的这句
request.open(Config.BASE_URL + uri, egret.HttpMethod.POST); //Config.BASE_URL换成自己的服务器地址
为
request.open(Config.BASE_URL + uri +"?time=" + Utils.getTimeNum(), egret.HttpMethod.POST);
Get请求同上
意思大概就是在后面拼接一个时间戳,避免从缓存里面去拿数据,保证每次都是去拿最新的数据
获取时间戳方法如下:
export function getTimeNum() {
let now = new Date();
let time = Date.parse(new Date().toString())
return time;
}