您的位置:首页 > 理论基础 > 计算机网络

微信小程序 js 网络请求底层方法(含页面提示)

2018-08-25 17:08 579 查看

var secret = require('./secret.js')

var Promise = require('./es6-promise.js')



 

//GET请求

function GET(requestHandler, LoadingFlag = true) {

request('GET', requestHandler, LoadingFlag)

}

 

//POST请求

function POST(requestHandler, LoadingFlag = true) {

request('POST', requestHandler, LoadingFlag)

}


 

//GET请求

function GetThen(requestHandler, LoadingFlag = true) {

return requestThen('GET', requestHandler, LoadingFlag)

}

 

//POST请求

function PostThen(requestHandler, LoadingFlag = true) {

return requestThen('POST', requestHandler, LoadingFlag)

}

 

function requestThen(method, requestHandler, LoadingFlag) {

if (LoadingFlag) {

wx.showLoading({

title: '数据加载中'

})

wx.showNavigationBarLoading()

}

//requestHandler.data.token = getApp().getToken();

var data = addToken(requestHandler.data);

return httpsPromisify(wx.request)({

url: requestHandler.url,

data: data,

header: {

"Content-Type": "application/x-www-form-urlencoded",

'sign': signature(data)

},

method: method

})

}


 

function addToken(params) {

if (params == null) {

params = []

}

params.token = getApp().getToken();

params.timestamp = Date.parse(new Date());

return params;

}


 

function httpsPromisify(fn) {

return function(obj = {}) {

return new Promise((resolve, reject) => {

obj.success = function(res) {

if (res.data.code == 402) {

wx.showToast({

icon: "none",

title: '登录失效,请重新登录',

success() {

wx.navigateTo({

url: "/pages/my/loginOrRegi/loginOrRegi",

})

}

})

}

wx.hideLoading();

wx.hideNavigationBarLoading()

resolve(res)

}

obj.fail = function(res) {

wx.hideLoading();

wx.hideNavigationBarLoading()

wx.showToast({

icon: "none",

title: '亲,服务器暂时没有响应',

})

reject(res)

}

fn(obj)

})

}

}


 

function signature(params) {

if (params == null) {

return

}

var sortList = []

for (var attr in params) {

sortList.push({

key: attr,

value: params[attr]

})

}

 

let data = sortList.sort(sortJ);

var strData = "";

for (let i = 0; i < data.length; i++) {

strData += data[i].key + "=" + data[i].value;

if (i != data.length - 1) {

strData += "&"

}

}

return secret.sha1(strData);

}

 

function sortJ(a, b) {

return a.key > b.key;

}

 

function request(method, requestHandler, LoadingFlag) {

var data = addToken(requestHandler.data);

 

if (LoadingFlag) wx.showLoading({

title: '数据加载',

})

wx.request({

url: requestHandler.url,

data: data,

header: {

"Content-Type": "application/x-www-form-urlencoded",

'sign': signature(data)

},

method: method,

success: function(res) {

//注意:可以对参数解密等处理

if (requestHandler.success)

requestHandler.success(res)

},

fail: function(res) {

if (requestHandler.fail)

requestHandler.fail(res)

},

complete: function(res) {

if (LoadingFlag) wx.hideLoading();

if (requestHandler.complete)

requestHandler.complete(res)

}

})

}

 

module.exports = {

GET: GET,

POST: POST,

GetThen: GetThen,

PostThen: PostThen

}

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐