Flask + Echarts 前端代码 如何进行拆分

本文介绍了如何将Flask应用中的Echarts前端代码进行拆分,解决代码过长问题。通过将CSS和JS移至外部文件,利用Ajax进行异步数据获取。详细讲解了如何定义接口、发起Ajax请求,并通过设置`async:false`实现同步请求,确保全局变量的使用。最后,文章提供了完整的Ajax请求示例。
摘要由CSDN通过智能技术生成

Flask + Echarts 前端代码 如何进行拆分

1. 遇到的问题

写Echarts前端代码太长了,为什么css和js代码都要放在html文件里,怎么拆开来?

2. 直接拆行吗

先直接把js独立出来

/static/js/myEcharts.js

let height = '600px'
let width = '945px'

let divEles = document.getElementsByTagName('div')
for (let i = 0; i < divEles.length; i++) {
    divEles[i].style.height = height
    divEles[i].style.width = width
}

let myEcharts1 = echarts.init(document.getElementById('div1'))
let myEcharts2 = echarts.init(document.getElementById('div2'))

// jinja2
echartsData = {{ data | safe }}

这还用说?直接报错

jinja2等后端模板引擎只能在html中用,js是不认识的。(除非使用一些前端渲染模板)

3. 思考一下

为什么要使用jinja2模板?

向前端传数据

前端不能自己拿数据吗?

可以,用js向后端发起一个请求就行

4. 用jq发起一个Ajax请求

4.1 定义接口

在发请求前先定义一个接口

@charts.route('/echartsData')
def get_echarts_data():
    option1 = get_option1()
    option5_guangdong, option5_jiangsu, option5_shandong = get_option5()
    option9_x, option9_d = get_option9()
    option11_d1, option11_d2 = get_option11()

    echarts_data = {
        'option1': option1,
        'option5_guangdong': option5_guangdong,
        'option5_jiangsu': option5_jiangsu,
        'option5_shandong': option5_shandong,
        'option9_x': option9_x,
        'option9_d': option9_d,
        'option11_d1': option11_d1,
        'option11_d2': option11_d2
    }

    return echarts_data

4.2 get请求

$.get('/echartsData', function (data) {
        let echartsData = data;
});

可是这样请求并不会发送,因为没有调用。

可以使用$(document).ready(function()等待doc加载完毕后自动调用

$(document).ready(function () {
    $.get('/echartsData', function (data) {
        let echartsData = data;
    })
})

但是这样的话,因为是异步请求,变量echartsData是不能在全局中使用的,之后的所有用到echartsData的代码都要卸载这个函数中

$(document).ready(function () {
    $.get('/echartsData', function (data) {
        let echartsData = data;
        
        option1 = {
			......
        };
        
        option2 = {
            ......
        };
        
        myEcharts1.setOption(option1);
        myEcharts2.setOption(option2);
    });
});

4.3 禁止异步

感觉函数太长了,难看,怎么禁止异步呢?

其实上面Ajax请求的代码是简写模式,完整的Ajax请求应该是这样写的:

let echartsData;

$.ajax({
    url: '/echartsData',
    async: false,
    success: function (data) {
        echartsData = data
    }
});

关于参数async,官网的解释是这样的:

async (default: true)

Type: Boolean

By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false.

意思默认值是true发起异步请求,设置为false禁止异步。

这样一来,就可以禁止异步请求,把数据赋值给全局变量了,拆分工作完成!


参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值