微信小程序 js 网络请求底层方法(含页面提示)
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
}
阅读更多- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 微信小程序基本的开发框架抽取,包括网络请求的二次封装,页面状态管理,常见页面模板封装
- 微信小程序请求网络API 400错误的解决方法
- js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法
- SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框
- JS判断当前页面是否在微信浏览器打开的方法
- 微信小程序 加载 app-service.js 错误解决方法
- js关闭当前页面不弹出提示的方法 js实现浏览器的各种菜单命令
- 微信小程序 网络请求API详解
- 让微信小程序每次请求的时候不改变session_id的方法
- JS实现刷新父页面不弹出提示框的方法
- 微信小程序网络请求的封装与填坑之路
- 微信小程序目录结构、事件处理、网络请求
- 微信小程序request请求实例,网络请求。
- IIS配置与错误提示 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 解决方法
- 页面隐藏js错误提示方法
- Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试
- 微信小程序开发之网络请求(POST请求)
- web 开发中的各种页面的提交请求数据方法汇总(持续更新,内容收集来自各网络)
- win8下面iis8提示 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。