最近做小程序项目,由于项目比较古老,所以后台提供的接口是WebService的,这样在小程序的网络请求中,就需要进行一些处理,在各种查资料爬坑后(不得不说,百度太坑,前几个资料跟本不好用,不过可能也就是我这头不好用,但是!!!!我的这种方法,肯定适用各种情况的WebService请求情况,所以看我就足够啦,哈哈哈哈哈!!!!!)
话不多说,直接来干货
//这是封装好的求情方法/** * GET请求API * @param {String} url 接口地址 * @param {Object} params 请求的参数 * @param {String} SOAPAction SOAP协议 * @param {String} josnResout XML对应标签 * @param {Function} successFun 接口调用成功返回的回调函数 * @param {Function} failFun 接口调用失败的回调函数 */function requestWebServerApi(url, params, SOAPAction, josnResout, successFunMa, failFun) { wx.request({ url: url, method: 'POST', data: params, header: { 'content-type': 'text/xml; charset=utf-8', 'SOAPAction': SOAPAction }, success: function (res) { var json = date.stringTurnXmlturnJson(res.data, josnResout); if (json.code != 1) { wx.showModal({ title: '提示', content: '请求失败', showCancel: false, confirmColor: "#6C93E0", success: function (res) { if (res.confirm) { } } }) } typeof successFunMa == "function" && successFunMa(json) }, fail: function (res) { wx.showModal({ title: '提示', content: '请求失败', showCancel: false, confirmColor: "#6C93E0", success: function (res) { if (res.confirm) { } } }) typeof failFun == 'function' && failFun(res.data) } }) }
// js文件中的调用getSchoolCollectInfo: function() { wx.showLoading({ title: '加载中', }); var that = this; var method = 'GetSchoolCollectInfoBySchoolCode'; // 方法名 var keyArr = ['strSchoolCode']; //参数 var valueArr = [that.data.schoolId]; //参数值 var datacopy = date.settingDatacopy(method, keyArr, valueArr); var josnResout = 'GetSchoolCollectInfoBySchoolCodeResult' request.requestWebServerApi(app.wsdlurl, datacopy, app.targetNamespace + method, josnResout, function (json) { wx.hideLoading() that.setData({ schoolName: json.result.SchoolName }); }, function (res) { wx.hideLoading()}); },
//targetNamespace 是命名空间 datacopy是参数值,需要转成XML的格式function settingDatacopy(n, keyArr, valueArr) { var datacopy = '<?xml version="1.0" encoding="utf-8"?>'; datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="' + app.targetNamespace + '">'; datacopy += '<soapenv:Header/>'; datacopy += '<soapenv:Body>'; //接着拼你要访问的方法名、参数名和你传递的实参值,比如我要访问的方法是getReader(String arg0,int arg1) //而我的实际调用是getReader('libsys',2),所以拼字符串如下 datacopy += '<ser:' + n + '>'; for (var index in keyArr) { datacopy += '<ser:' + keyArr[index] + '>'; datacopy += valueArr[index]; datacopy += '</ser:' + keyArr[index] + '>'; } datacopy += '</ser:' + n + '>'; datacopy += '</soapenv:Body>'; datacopy += '</soapenv:Envelope>'; return datacopy; }
这样就可以请求成功啦,但是大家可以看到我下面的方法,因为请求成功的是xml格式的数据,需要把xml数据转成json数据,方法如下
var json = date.stringTurnXmlturnJson(res.data, josnResout);
下载这个库
成功后,提出部分文件,放在一个文件夹中,导入项目,如图
image.png
//XML xml数据//value 要取出xml数据中的标签function stringTurnXmlturnJson(XML,value) { var Parser = require('../utils/dist/dom-parser.js'); var XMLParser = new Parser.DOMParser(); var doc = XMLParser.parseFromString(XML); var xmlStr = doc.getElementsByTagName(value)[0].firstChild.nodeValue;// var josn = JSON.parse(xmlStr); return josn; }
备注 calc() //可以直接计算rpx px的加减
作者:叫我马小帅
链接:https://www.jianshu.com/p/e6a2ca948630
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦