我已经花了两天但却无法理解。
每次在print value
的{{1}}行中打印出不同的值,但一旦通过index()
转到html,它似乎不会收到新的不同值。 render_template('index.html', car_value=value)
仅保留打印出的第一个接收值,而不是在第一个值之后传递其他值。
请通过console.log(y)
和index.html
Flask
能够接收这些新值
<小时/> 在Amadan的帮助下编辑
Jinja2
并且
def get_data():
df = sqlio.read_sql(qry1, conn)
value = df['count'][0]
return value
@app.route('/get_data', methods=['GET','POST'])
def get_data_route():
value = get_data()
return value
@app.route('/get_car_value', methods=['GET'])
def get_car_value():
data = "{ car_value: %s }" % get_data_route()
return data, 200, {'Content-Type': 'application/json; charset=utf-8'}
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(
port=8000,
host='0.0.0.0'
)
仍然无法正常工作......它不会在$(function() {
var chart;
$('#car_id').highcharts({
chart: {
type: 'spline',
animation: Highcharts.svg, // don't animate in old IE
marginRight: 10,
events: {
load: function() {
var series = this.series[0];
setInterval(function() {
var x = (new Date()).getTime();
$.ajax({
type: "GET",
url: "/get_car_value",
success: function(data) {
var y = data.car_value;
console.log(y)
series.addPoint([x, y], true, true);
}
});
}, 5000);
}
}
},
答案 0 :(得分:1)
由于您始终使用AJAX访问相同的URL,因此很可能正在缓存它。尝试在负责数据AJAX的Flask控制器的顶部添加它:
response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '-1'
或者,您可以将您的网址更改为:
url: "/?" + new Date().getTime(),
因此无法缓存(因为每次都会有所不同)。
编辑:我刚注意到,您在模板中设置了y
的值,这与AJAX调用无关。要刷新该值,您必须重新加载页面,AJAX根本不用,因为它获取一些数据,然后忽略它。
url: '/get_car_value',
success: function(data) {
var y = data.car_value;
console.log(y)
series.addPoint([x, y], true, true);
}
并制作一个新的控制器:
@app.route('/get_car_value', methods=['GET'])
def get_car_value():
import json
data = json.dumps({ car_value: get_data_route() })
return data, 200, {'Content-Type': 'application/json; charset=utf-8'}
(您可以使用现有的get_data_route
控制器,但我喜欢一致的API,并且在使用AJAX传输数据时始终使用JSON非常有用。)
编辑:JSON脑屁。