在Flask中使用make_response将两个变量传递给javascript

问题描述 投票:0回答:1

有人可以帮我理解如何通过HTML将我的视图中的两个变量传递给javascript?当我只传递动态(取自db)json格式的数据时,一切正常,但我还需要将另一个静态整数值传递给JS文件。当我更改视图.py文件时:

response = make_response(render_template('live-data.html', data=json.dumps(data)))

response = make_response(render_template('live-data.html', data=json.dumps(data), bpm=777))

然后我将{{bpm}}添加到live-data.html。最后在JS文件中我改变了函数的输入参数

success: function(point) {

success: function(point, bpm) {

而不是在“休息”之前工作的东西。 :/如何从JS文件中的flask视图.py中获取动态数据元组和静态整数文件?

这就是我所拥有的,在我进行更改以在JS文件中从.py接收'bpm'值之前它工作正常。

.py文件:

@app.route('/')
def hello_world():
    return render_template('index.html')

@app.route('/live-data')
def live_data():
    # Create an array and echo it as JSON
    cur = mysql.connection.cursor()
    cur.execute('''SELECT time, value FROM data ORDER BY id DESC LIMIT 1''')
    rv = cur.fetchall()
    u_time = time.mktime(rv[0]['time'].timetuple())
    value = rv[0]['value']
    #time in unix form
    data = [u_time * 1000, value]
    response = make_response(render_template('live-data.html', data=json.dumps(data)))
    response.content_type = 'application/json'
    return response

index.html的:

<div class="container-fluid">
  <div class="row">
      <div class="container-fluid" id="data-container"></div>
  </div>
</div>

活data.html:

{{ data }}

并在JavaScript文件中:

var chart;
function requestData() {
    $.ajax({
        url: '/live-data',
        success: function(point) {
            var series = chart.series[0],
                shift = series.data.length > 20; // shift if the series is
                                                 // longer than 20

            // add the point
            chart.series[0].addPoint(point, true, shift);

            // title
            // chart.setTitle(null, {text: "Beats per minute - " + bpm});
            // call it again after one second
            setTimeout(requestData, 1000);
        },
        cache: false
    });
}

有更多的js代码在index.html上填充“data-container”,但我认为这与此无关(如果看到所有内容会有所帮助,请告诉我)。

任何帮助是极大的赞赏。谢谢!

javascript python-3.x flask jinja2
1个回答
1
投票

所以你现在采取的方法非常繁琐。你正在向烧瓶发送一个AJAX请求,然后烧瓶查找一些数据,然后将数据渲染成文本文件/ html文件,然后将请求调整为json类型,然后返回浏览器。

Flask已经内置了处理json的功能,所以你没有完成所有这些步骤。

你在js中的success函数应该只接受一个参数,响应瓶给你。

var chart;
function requestData() {
    $.ajax({
        url: '/live-data',
        success: function(response) {

            var series = chart.series[0],
                shift = series.data.length > 20; // shift if the series is
                                                 // longer than 20

            // add the point
            chart.series[0].addPoint(response.data, true, shift);

            // title
            // chart.setTitle(null, {text: "Beats per minute - " + response.bpm});
            // call it again after one second
            setTimeout(requestData, 1000);
        },
        cache: false
    });
}

您使用烧瓶做出的响应可以使用烧瓶中的jsonify功能完成。此函数将字典转换为JSON。

from flask import jsonify

@app.route('/live-data')
def live_data():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT time, value FROM data ORDER BY id DESC LIMIT 1''')
    rv = cur.fetchall()
    u_time = time.mktime(rv[0]['time'].timetuple())
    value = rv[0]['value']
    #time in unix form
    data = [u_time * 1000, value]
    return jsonify({'data': data, 'bpm': 777})
© www.soinside.com 2019 - 2024. All rights reserved.