欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从后台请求数据并解析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                       
                    }
    },

 

相关标签: ajax请求同步问题