当前位置: 首页 > Web前端 > HTML

封装x2js+Promise将JSON转为XML格式

时间:2023-03-28 19:13:47 HTML

一般服务端接口的参数都是json格式,但是由于某些原因,输入参数需要XML格式怎么办?比如本地系统安装的IC卡驱动服务,需要写卡操作接口的输入参数为xml格式:已有参数,数据项可以有多项:varjson={iccard:{operation:"writeCard",data:[{Id:1,Number:10001},...]}};实际XML格式:writeCard//接口操作将writeCard标识为写卡。110001210002310003...一种方式是将json数据的所有参数通过正则化转换为带有结束标记尖括号的字符细绳。其实可以用更简单更稳定的方法,使用x2js库将json转为xml格式,下载安装x2js库并导入:importx2jsfrom"x2js";varx2jsxml=newx2js();if(iccardApi==”writeCard”){varjson={iccard:{operation:"writeCard",data:data.param}};data.param=x2jsxml.js2xml(json);//转换为xml格式}请求前进行入参处理后,将数据带入入参,使用Promise和Ajax封装一个CCardAjax函数ICCard.js,专门处理IC卡XML接口对接:"usestrict";import{Loading}from"element-ui";importx2jsfrom"x2js";varx2jsxml=newx2js();constbaseUrl="http://localhost:8888/iccard";//IC卡控制地址letICCardObj={};//iccardApi(读卡,writeCard写卡)ICCardObj.ajax=(iccardApi,data,that)=>{varisHideErrorTip=false;if("isHideErrorTip"indata){//是否显示无卡提示isHideErrorTip=data.isHideErrorTip;删除数据.isHideErrorTip;}if(iccardApi=="writeCard"){varjson={iccard:{操作:"writeCard",数据:data.param}};data.param=x2jsxml.js2xml(json);}varloading=Loading.service({lock:true,text:"Operating...",spinner:"el-icon-loading",background:"rgba(0,0,0,0.3)"});returnnewPromise((resolve,reject)=>{$.ajax({url:baseUrl+"/"+iccardApi,type:"GET",data:data,success:function(res){loading.close();if(res.resultCode=="error"){//无卡读卡失败rejected(res);if(!isHideErrorTip){that.$message({title:"Warning",message:"Pleaseinsertthecard!",type:"error"});}}else{resolve(res.dataList);console.log("读取成功");}},error:function(res){//读卡失败loading.close();if(!isHideErrorTip){that.$message({title:"Warning",message:"IC卡控件未启动,请先正确启动",type:"error"});}拒绝(res);}});});};exportdefaultICCardObj;ExportICCardAjaxBind到Vue原型链供各组件使用:importICCardAjaxfrom"@/assets/js/ICCard.js";Vue.prototype.ICCardAjax=ICCardAjax;在组件中使用://读卡查询readICCard(){returnnewPromise((resolve,rej)=>{this.ICCardAjax.ajax("read",{},this).then(res=>{resolve(res);//读卡成功...}).catch(res=>{rej(res);...//读卡失败});});},writeCard(data){returnnewPromise((resolve,rej)=>{this.ICCardAjax.ajax("writeCard",{param:data},this).then(res=>{resolve(res);console.log("写卡成功");}).catch(res=>{rej(res);this.$message({message:"写卡失败",type:"error"});});});},//写卡片querySubmit(){this.writeCard([{Id:4,Number:111},{Id:4,Number:222},{Id:4,Number:333}]).then(res=>{this.$message({message:"写卡成功!",type:"success"});this.readICCard();});},```