我们前端开发就要有面向对象的思想,让自己写的程序更加简单明了,不要有太多的融于代码,所以这里提到了封装的思想。
之前的项目里每次调用网络请求都调用了类似的代码:
//加载数据 requestData() { var that = this if (that.data.listData.length < 1) { wx.showToast({ title: ‘加载中‘, duration: 500 }) } else { wx.showNavigationBarLoading() } wx.request({ url: app.globalData.webUrl+"serviceAction/getStoreList.do", data: { longitude: app.globalData.longitude, latitude: app.globalData.latitude, city: "长沙", page: this.data.pageNum, pagesize: 10, userId: 38971, }, method: "POST", "Content-Type": "application/x-www-form-urlencoded", success: function (res) { wx.stopPullDownRefresh() if (that.data.pageNum == 1) { that.data.listData = []//清空数组 } var list = []; var imgUrl = []; var url = "http://yijiao.oss-cn-qingdao.aliyuncs.com/"; for (var i = 0; i < res.data.content.length; i++) { list.push(res.data.content[i]); imgUrl.push(url + res.data.content[i].mainImgUrl) console.log("请求成功" + res.data.content[i]) } that.setData({ listData: list,//更新数据 imageUrl: imgUrl }) }, fail: function () { wx.showModal({ title: ‘加载出错‘, showCancel: false }) }, complete: function () { wx.hideToast() wx.hideNavigationBarLoading() } }) }
每次只要涉及网络获取数据,就会有这些冗余代码的出现,之前不太熟悉,,没有做封装,现在做了一个项目,知道了很多思想,也了解了大致,想做一个简单的调用,也方便了以后查找某个接口的简化。
咱们把公共方法写在util.j中 util.js代码:
var webUrl = "https://www.jiaodutong.com/"; //网络请求方法 function getWebDataWithPostOrGet(model){ wx.request({ url: webUrl +model.url , data:model.param, header: { "Content-Type": "application/json" }, method: model.method, success: function (res){ model.success(res.data) }, fail: function(res){ wx.showModal({ title: res, showCancel: false }) } }) } // 导出模块 module.exports = { getWebDataWithPostOrGet: getWebDataWithPostOrGet }
然后前端调用就可以这样做了:
var utils = require(‘../../utils/util.js‘) var webData = { "longitude": app.globalData.longitude, "latitude": app.globalData.latitude, "city": "长沙", "page": 0, "pagesize": 10, "userId": 38971 } utils.getWebDataWithPost({ url: utils.bigUrl , param: webData, method: "POST", success:function (data){ console.log(data.content[0].mainImgUrl); } })
我之前写的 "Content-Type": "application/x-www-form-urlencoded", 报了个错误
接口本身是没有问题的,但是400访问不到,想到可能是header 的问题,查看文档:
改为 "Content-Type": "application/json",正确拿到返回数据。
还有几点需要注意下:
1.一般对自己写的接口给自己用的时候,method方法或header都是约定好的,所以不用重复书写,哎util中写为固定的格式。
2.而fail回调方法也可以统一处理;进一步地,也可以对success回调里的针对code值进一步判断,特定错误码统一处理,比如跳转登录页面等。 例如下列代码,更加完善。
if(res.data.code==0) { model.success(res.data) }
3.如果每一个接口,都当作参数,项目变大后,接口特别多,查找不方便,可以写一个公共接口类,有一点需要注意就是暴露变量和暴露方法不同类如: url.js代码
//获取门店列表 var bigUrl = "serviceAction/getStoreList.do"; //获取项目列表 var projectList = "serviceAction/getItemsByStoreId.do" //导出模块 module.exports = { bigUrl, projectList }
原文:https://www.cnblogs.com/hs610/p/10826893.html