为了账号安全,请及时绑定邮箱和手机立即绑定

初探小程序(二)请求WebService

标签:
WebApp

最近做小程序项目,由于项目比较古老,所以后台提供的接口是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);

下载这个库
成功后,提出部分文件,放在一个文件夹中,导入项目,如图

webp

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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消