有人可以帮我理解如何通过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”,但我认为这与此无关(如果看到所有内容会有所帮助,请告诉我)。
任何帮助是极大的赞赏。谢谢!
所以你现在采取的方法非常繁琐。你正在向烧瓶发送一个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})