微信小程序 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 相关文章推荐
Js 获取HTML DOM节点元素的方法小结
Apr 24 Javascript
formvalidator验证插件中有关ajax验证问题
Jan 04 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
javascript中alert()与console.log()的区别
Aug 26 Javascript
javascript实现PC网页里的拖拽效果
Mar 14 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
Feb 27 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 Javascript
在vue中使用SockJS实现webSocket通信的过程
Aug 29 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
利用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
php curl选项列表(超详细)
2013/07/01 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
python邮件发送smtplib使用详解
2020/06/16 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
活动志愿者自荐信
2014/01/27 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
吴仁宝观后感
2015/06/09 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android