Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字典输出是否在python中转换为requestText中的字符串?_Python_Dictionary_Flask - Fatal编程技术网

字典输出是否在python中转换为requestText中的字符串?

字典输出是否在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(),

我使用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(), 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()