小程序:解析xml数据 + jsonp数据+base64解码

对接一个某个大公司的接口,返回的数据有json, xml 和jsonp三种。下边把解析方法记录一下,备用。

1.解析xml

  1. 下载xmldom库:https://github.com/jindw/xmldom
  2. 下载文件夹后,把xmldom-master改名为xml
  3. 放在小程序工程内,在需要调用的文件中引入头文件
    var Parser = require("../xml/dom-parser.js"); 
    
    注:我是放在index的同层目录,根据位置改变引入链接
  4. 使用示例
    //模拟xml数据
     var xml = "<? xml version =\"1.0\" encoding=\"utf - 8\"?><Response><Type><![CDATA[1]]></Type><Commands>    <Command name=\"notrq\" state=\"0\" />  </Commands><Question><![CDATA[cjwt_08]]></Question><Content><![CDATA[123!@#abc!@#456!@#def]]></Content><Similarity><![CDATA[1.0]]></Similarity><RelatedQuestions><Question><![CDATA[cjwt_08]]></Question></RelatedQuestions></Response>";
    
    var XMLParser = new Parser.DOMParser()
    var doc = XMLParser.parseFromString(xml);
    var docRoot = doc.getElementsByTagName('Content')['0'];
    var str = docRoot.firstChild.nodeValue;
    var list = str.split("!@#");// 转为数组
    console.log(list)
    //打印结果
    ["123", "abc", "456", "def"]
    

2.解析JSONP + base64解码

1.jsonp截取需要的内容

	//jsonp 解析
	analyticaJsonpData() {
    let jonspStr = "jsonpCallback({\"retcode\":0,\"retmsg\":\"success\",\"records\":87,\"datas\":\"5oiR5piv5LiA5Y+q57KJ5Yi35YygLOeyieWIt+acrOmihuW8ug==\"})";
    //接受数据先转成文本
    var dataStr = jonspStr.toString();
    // 截取字符串
    dataStr = dataStr.replace("jsonpCallback(", "")
    dataStr = dataStr.replace(")", "")
    var data = JSON.parse(dataStr);
    var str = this.base64_decode(data.datas);
    console.log(str)
    //打印结果
    //我是一只粉刷匠,粉刷本领强

  },
	// base64解码
   base64_decode(input){ 
      var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      var output = "";
      var chr1, chr2, chr3;
      var enc1, enc2, enc3, enc4;
      var i = 0;
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
      while (i < input.length) {
        enc1 = base64EncodeChars.indexOf(input.charAt(i++));
        enc2 = base64EncodeChars.indexOf(input.charAt(i++));
        enc3 = base64EncodeChars.indexOf(input.charAt(i++));
        enc4 = base64EncodeChars.indexOf(input.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        output = output + String.fromCharCode(chr1);
        if (enc3 != 64) {
          output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
          output = output + String.fromCharCode(chr3);
        }
      }
      return this.utf8_decode(output);
    },
     utf8_decode(utftext) { // utf-8解码
      var string = '';
      let i = 0;
      let c = 0;
      let c1 = 0;
      let c2 = 0;
      while (i < utftext.length) {
        c = utftext.charCodeAt(i);
        if (c < 128) {
          string += String.fromCharCode(c);
          i++;
        } else if ((c > 191) && (c < 224)) {
          c1 = utftext.charCodeAt(i + 1);
          string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
          i += 2;
        } else {
          c1 = utftext.charCodeAt(i + 1);
          c2 = utftext.charCodeAt(i + 2);
          string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
          i += 3;
        }
      }
      return string;
    }

end

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CH2.Ajax 框架 支持简单加密(Base64/DES)和跨域(Jsonp) 如何以最快捷的方式直接调用服务器方法? 场景: 比如,服务器已有如下方法: namespace CH2 { class BLL{ User Login(string name,string password){ //balabala... } } } 如何写最少的 js 调用以上方法?也许你只需要写五行 js 代码: CH2.BLL.Login( {name: "caihaihua", password: "123456"} ,function(user){ alert('登录成功!'); } ,function(errormessage){ alert('登录失败!' + errormessage);} ); 步骤: 1.网站引用两个dll:CH2.Ajax.dll 和 Newtonsoft.Json.dll 2.把服务器方法添加属性 AjaxMethod。(例一) 3.添加一个一般处理程序,继承于 AjaxHandler<T> (T 为服务器方法的类名) 。(例二) 4.页面中引用两个js。(例三) 5.准备工作完成了。ajax 调用服务器方法,只需要在 js 中直接写: [namespace].[classname].[methodname](arguments,onsuccess,onfailed) 其中, arguments 为参数集合 onsuccess 为调用成功的回调函数 function(returndata) onfailed 为调用失败的回调函数(可选) function(errormessage) (例四) 例一: namespace CH2 { class BLL{ [AjaxMethod] // ←原有方法中添加这一属性 User Login(string name,string password){ } } } 例二: <%@ WebHandler Language="C#" Class="Handler" %> using CH2; public class Handler : AjaxHandler<BLL> // ←一般处理程序继承于AjaxHandler<BLL> { //此处不需要任何代码 } 例三: <script type="text/javascript" src="Ajax/Ajax.js"></script> // 配套的 js <script type="text/javascript" src="Ajax/Handler.ashx"></script> // 第 3 步中的一般处理程序(注意 url 中不带任何传参) 例四: <script type="text/javascript"> btn.onclick = function(){ // 你这样直接调用服务器方法: // CH2.BLL.Login(arguments,onsuccess,onfailed) CH2.BLL.Login( { //服务器方法需要的参数。key 为参数名,value 为对应的 json 对象 name: "caihaihua" ,password: "123456" } , function(data){ //onsuccess 方法。data 为服务器方法返回的结果(User) } , function(errmsg){ //onfailed 方法。 }); } </script>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值