微信小程序 wx.request(接口调用方式)详解及实例


Posted in Javascript onNovember 23, 2016

微信小程序 wx.request----接口调用方式

    最近开发了一个微信小程序版的任务管理系统,在向Java后台发送接口时遇到了一些问题,在这里做一个简单的总结。

官方接口

官方给出的接口叫做wx.request,请求方式比较简单,下面是官网给出的请求实例。

wx.request({
 url: 'test.php', //仅为示例,并非真实的接口地址
 data: {
   x: '' ,
   y: ''
 },
 header: {
   'content-type': 'application/json'
 },
 success: function(res) {
  console.log(res.data)
 }
})

存在的问题

wx.request请求的header中content-type默认为application/json,如果我们想换种方式比如用"application/x-www-form-urlencoded"会发现在请求头信息中并没有取代默认的application/json而是新增了这种方式,另外在用jquery.ajax请求时即便同样使用application/json方式来请求,得到的数据格式也不相同,无论用什么请求方式ajax都会将请求数据转换为&name1=value1&name2=value2的形式,这样在根据content-type来解析请求数据时就会出现问题,不知道微信是有意这样做还是它根本就是个bug。总之是给我带来了不必要的麻烦。

微信小程序发送的是https请求,在本地调试时可以用http,如果放在手机上测试时校验请求方式和域名,不合法会报以下错误:

微信小程序 wx.request(接口调用方式)详解及实例

为了方便请求,可以对wx.request做一个简单的封装,这样我们再调用的时候就方便了许多,代码如下:

var app = getApp();
function request(url,postData,doSuccess,doFail,doComplete){
   var host = getApp().conf.host;
   wx.request({
    url: host+url,
    data:postData,
    method: 'POST', 
    success: function(res){
     if(typeof doSuccess == "function"){
       doSuccess(res);
     }
    },
    fail: function() {
     if(typeof doFail == "function"){
       doFail();
     }
    },
    complete: function() {
     if(typeof doComplete == "function"){
       doComplete();
     }
    }
   });
 }
}

module.exports.request = request;

如果一个接口在不同地方频繁用到,原本设想写一个函数,然后将函数暴露供其他js调用,但后来发现wx.request中设置async是无效的,只能发异步请求,所以如果想写一个函数来返回调用接口得到的数据就比较难实现。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
Jun 14 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
JavaScript中的getDay()方法使用详解
Jun 09 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
ReactNative之FlatList的具体使用方法
Nov 29 Javascript
详解KOA2如何手写中间件(装饰器模式)
Oct 11 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
利用jquery获取select下拉框的值
Nov 23 #Javascript
JQuery和PHP结合实现动态进度条上传显示
Nov 23 #Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 #Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 #Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 #Javascript
jquery实现点击页面回到顶部
Nov 23 #Javascript
通过原生JS实现为元素添加事件的方法
Nov 23 #Javascript
You might like
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
php实现登录页面的简单实例
2019/09/29 PHP
一个仿糯米弹框效果demo
2014/07/22 Javascript
javascript的push使用指南
2014/12/05 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
Python操作json数据的一个简单例子
2014/04/17 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
Python实现Linux监控的方法
2019/05/16 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
仓管员岗位职责范文
2013/11/08 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
社会调查研究计划书
2014/05/01 职场文书
保护野生动物倡议书
2014/05/16 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
工作表扬信
2015/01/17 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python