字典输出是否在python中转换为requestText中的字符串?
我使用flash响应将字典输出发送到HTML,并将其转换为字符串字典输出是否在python中转换为requestText中的字符串?,python,dictionary,flask,Python,Dictionary,Flask,我使用flash响应将字典输出发送到HTML,并将其转换为字符串 @app.route('/stream') def stream(): def inner(): for x in [{"EntID" : 3, "x" : 100, "y" : 400},{"abc":"400"}]: time.sleep(10) yield '%s\n' % x return flask.Response(inner(),
@app.route('/stream')
def stream():
def inner():
for x in [{"EntID" : 3, "x" : 100, "y" : 400},{"abc":"400"}]:
time.sleep(10)
yield '%s\n' % x
return flask.Response(inner(), mimetype='text/html')
在HTML端
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET', '{{ url_for('stream') }}');
xhr.send();
setInterval(function() {
var stuff = xhr.responseText;
output_1.textContent = xhr.responseText;
output_2.textContent = xhr.responseText;
output_3.textContent = xhr.responseText;
}, 1000);
输出是{“EntID”:3,“x”:100,“y”:400}
但我希望输出为
output_1.textContent :3
output_2.textContent: 100
output_3.textContent : 400
首先,您应该使用模块
json
创建正确的json数据,稍后JavaScript可以将这些数据转换回字典
yield json.dumps(x)
及
但它还需要记住xhr.responseText的旧长度,并与新长度进行比较,因为它将包含来自所有产量的所有数据,并且您只需要获取新文本
var old_position = 0;
var new_position = 0;
setInterval(function() {
new_position = xhr.responseText.length;
if(new_position != old_position) {
var text = xhr.responseText.substr(old_position, new_position);
//alert(text);
old_position = new_position;
var data = JSON.parse(text);
output_1.textContent = data.EntID;
output_2.textContent = data.x;
output_3.textContent = data.y;
}
}, 1000);
</script>''')
var old_position=0;
var新位置=0;
setInterval(函数(){
新位置=xhr.responseText.length;
if(新位置!=旧位置){
var text=xhr.responseText.substr(旧位置、新位置);
//警报(文本);
旧位置=新位置;
var data=JSON.parse(文本);
输出_1.textContent=data.EntID;
输出_2.textContent=data.x;
输出_3.textContent=data.y;
}
}, 1000);
''')
我留下的唯一问题是,你在每一个产出中发送不同的数据-不同的口述和不同的键
可以放入一个文件并运行的最小工作代码
from flask import Flask, Response, render_template_string
import time
import json
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
output_1.textContent: <span id="output1"></span><br/>
output_2.textContent: <span id="output2"></span><br/>
output_3.textContent: <span id="output3"></span><br/>
<script>
var output_1 = document.getElementById('output1');
var output_2 = document.getElementById('output2');
var output_3 = document.getElementById('output3');
var xhr = new XMLHttpRequest();
xhr.open('GET', '{{ url_for('stream') }}');
xhr.send();
var old_position = 0;
var new_position = 0;
setInterval(function() {
new_position = xhr.responseText.length;
if(new_position != old_position) {
var text = xhr.responseText.substr(old_position, new_position);
alert(text);
old_position = new_position;
var data = JSON.parse(text);
output_1.textContent = data.EntID;
output_2.textContent = data.x;
output_3.textContent = data.y;
}
}, 1000);
</script>''')
@app.route('/stream')
def stream():
def inner():
for x in [{"EntID": 3, "x": 100, "y": 400}, {"abc": "400"}]:
time.sleep(5)
yield json.dumps(x)
return Response(inner(), mimetype='text/html')
if __name__ == '__main__':
app.run()
从烧瓶导入烧瓶,响应,呈现\u模板\u字符串
导入时间
导入json
app=烧瓶(名称)
@应用程序路径(“/”)
def index():
返回渲染模板字符串(“”)
输出_1.text内容:
输出2.text内容:
输出_3.text内容:
var output_1=document.getElementById('output1');
var output_2=document.getElementById('output2');
var output_3=document.getElementById('output3');
var xhr=new XMLHttpRequest();
open('GET','url_for('stream')});
xhr.send();
var old_position=0;
var新位置=0;
setInterval(函数(){
新位置=xhr.responseText.length;
if(新位置!=旧位置){
var text=xhr.responseText.substr(旧位置、新位置);
警报(文本);
旧位置=新位置;
var data=JSON.parse(文本);
输出_1.textContent=data.EntID;
输出_2.textContent=data.x;
输出_3.textContent=data.y;
}
}, 1000);
''')
@app.route(“/stream”)
def stream():
def inner():
对于[{“EntID”:3,“x”:100,“y”:400},{“abc”:“400}]中的x:
时间。睡眠(5)
产生json.dumps(x)
返回响应(内部(),mimetype='text/html')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
在向HTMLhow发送关于xhr.responseText[“EntID”]
或类似JavaScript的内容之前,是否可以格式化文本?或者JavaScript有for
-循环,可以从字典中获取值。似乎您必须学习JavaScript来实现这一点。您可能必须使用将字符串{“EntID”:3,“x”:100,“y”:400}
转换为JavaScript中的字典-var stuff=JSON.parser(xhr.responseText)
并使用output_1.textContent=stuff.EntID
我完成了JSON转储和解析部分。但是,长度匹配是很好的逻辑。谢谢,我从你那里学到了一件新东西。
from flask import Flask, Response, render_template_string
import time
import json
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
output_1.textContent: <span id="output1"></span><br/>
output_2.textContent: <span id="output2"></span><br/>
output_3.textContent: <span id="output3"></span><br/>
<script>
var output_1 = document.getElementById('output1');
var output_2 = document.getElementById('output2');
var output_3 = document.getElementById('output3');
var xhr = new XMLHttpRequest();
xhr.open('GET', '{{ url_for('stream') }}');
xhr.send();
var old_position = 0;
var new_position = 0;
setInterval(function() {
new_position = xhr.responseText.length;
if(new_position != old_position) {
var text = xhr.responseText.substr(old_position, new_position);
alert(text);
old_position = new_position;
var data = JSON.parse(text);
output_1.textContent = data.EntID;
output_2.textContent = data.x;
output_3.textContent = data.y;
}
}, 1000);
</script>''')
@app.route('/stream')
def stream():
def inner():
for x in [{"EntID": 3, "x": 100, "y": 400}, {"abc": "400"}]:
time.sleep(5)
yield json.dumps(x)
return Response(inner(), mimetype='text/html')
if __name__ == '__main__':
app.run()