从后台请求数据并解析json数据
程序员文章站
2022-06-17 16:03:09
...
背景:由于ajax采用同步方式请求数据,如果将解析方法写在ajax里面不存在问题,但是,如果在解析时出现循环比较复杂的结构时,效率不高,因此:先去取数,取到之后,再去解析。单独分开后,这时再去取数解析便会出现取出数据不全,导致解析出错,必须加promise解决同步问题,保证在取完数据后再解析。
使用方法:
getCurrClkNodeDataList(node){
var _this = this;
if (node) {
// 要先去查数据然后再解析,否则数据不全
new Promise(function(resolve, reject) {
_this.getNodeList(node.id,resolve);//用该节点去后台请求数据
})
.then(function(success) {
_this.parseDataBindTable(node); // 绑定table list
});
}
},
1. 先去后台通过ajax请求去查数
// 获取node信息list
getNodeList(id,resolve){
debugger;
var _this = this;
this.tableLoading = true;
Ajax.get(this.url+'/nodes/findRefs?'+'nodeId='+ id,
function(response, status, xhr) {
if (response.success) {
_this.nodes = response.data;
_this.tableLoading = false;
resolve("success");
}
else {
_this.tableLoading = false;
_this.$Message.error(response.message);
}
})
},
2. 解析取到的数据 即this.nodes
// 解析获取数据绑定table
parseDataBindTable(node){
// 解析得到数据
var nodes = this.nodes;
this.tableData = [];//用之前先清空table数据
// 遍历nodes
for (let i = 0; i < nodes.length; i++) {
let item = nodes[i];
if (item.rel.bName === "HasP") {
this.shownTableFlag = true;//如果是属性,则显示table
this.pushTableData(item,node);
}else{
this.shownTableFlag = false;// 如果不是属性,则不显示table
}
}
},
pushTableData(item,node){
// 如果没有实时值,则只存其他值,若有则存
if (item.realTimeValue===null||item.realTimeValue===undefined) {
_this.tableData.push(item = item.targetNode.nodeValues) ;// 给table绑定值 如果是数组,必须push
}else{
this.tableData.push({
pName : node.title,
bName : item.tNode.bName,
desc : item.tNode.desc,
nClass : item.tNode.nClass,
}) ;// 给table绑定值 数组必须push
}
},
上一篇: vue 请求拦截器的配置方法详解
下一篇: http请求和响应头格式分析