最近做小程序项目,由于项目比较古老,所以后台提供的接口是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);
成功后,提出部分文件,放在一个文件夹中,导入项目,如图
//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;
}
搞定,就是这样的一套流程,如果有问题的话,欢迎打扰,互相学习
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。