微信小程序 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 option删除代码集合
Nov 12 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
详解Angular2学习笔记之Html属性绑定
Jan 03 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
js中this的指向问题归纳总结
Nov 28 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 Javascript
Vue前端判断数据对象是否为空的实例
Sep 02 Javascript
vue实现表格合并功能
Dec 01 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
php简单创建zip压缩文件的方法
2016/04/30 PHP
PHP图片水印类的封装
2017/07/06 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
Python中for循环详解
2014/01/17 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python实现两张图片的像素融合
2019/02/23 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
实习证明格式范文
2014/10/14 职场文书
2014年业务工作总结
2014/11/17 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
个人收入证明范本
2015/06/12 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js