解决echarts 动态绑定数据无法渲染的问题

背景:今天实现了个柱状图,遇到echarts无法动态绑定并渲染成图。一开始以为是数据问题,一直再调后端的数据格式,最后debugger前端发现不是数据格式引起的问题。而是浏览器异步执行js脚本机制导致的,echarts图渲染在前,数据赋值在后了,导致了无法正常渲染。

问题复现:

请看我的后端接口:

请看我的前端:我把数据请求的这个script放到了,echarts图表渲染前面了,目的就是为了想要先执行它,获取相关数据给echarts。但由于浏览器是多线程异步执行的,不同线程的脚本并不是根据代码位置顺序执行的。所以造成了此次渲染失败。

<script>
    var mydata=[];
    $(  function(){
        $.ajax({
            type:"GET",
            url:"http://localhost:8080/getCount",
            dataType:"json",
            async:false,
            success:function(data){
                mydata=data
                console.log(mydata);

                debugger;

            },
            error:function(jqXHR){
                console.log("Error: "+jqXHR.status);
            }
        })}

    );
</script>

<script type="text/javascript">

    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    // 指定图表的配置项和数据
    var option = {
        title: {
            text: '数据统计'
        },
        tooltip: {},
        legend: {
            data: ['信息统计']
        },
        xAxis: {
            data: ['订单量','客户量','处理中']
        },
        yAxis: {},
        series:  [
            {
                name: '信息统计',
                type: 'bar',
                data: mydata
            }
        ]
    };
    debugger;
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    $(window).resize(myChart.resize);


</script>

请看我的debugger:

1、浏览器先执行了,echarts的脚本代码

 2、紧接着,又执行了含有ajax请求数据的脚本代码

 问题解决:

方法:将echarts渲染脚本放到回调函数里面就可以,这样就可以保证先执行请求数据,后执行渲染了。下面是我正确的代码。

<script>
    var mydata=[];
    $(  function(){
        $.ajax({
            type:"GET",
            url:"http://localhost:8080/getCount",
            dataType:"json",
            async:false,
            success:function(data){
                mydata=data
                console.log(mydata);
                // 基于准备好的dom,初始化echarts实例
                var myChart = echarts.init(document.getElementById('main'));

                // 指定图表的配置项和数据
                var option = {
                    title: {
                        text: '数据统计'
                    },
                    tooltip: {},
                    legend: {
                        data: ['信息统计']
                    },
                    xAxis: {
                        data: ['订单量','客户量','处理中']
                    },
                    yAxis: {},
                    series:  [
                        {
                            name: '信息统计',
                            type: 'bar',
                            data: mydata
                        }
                    ]
                };
                debugger;
                // 使用刚指定的配置项和数据显示图表。
                myChart.setOption(option);
                debugger;

            },
            error:function(jqXHR){
                console.log("Error: "+jqXHR.status);
            }
        })}

    );
</script>

修改后的debugger数据:

问题解决,正常渲染了:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值