我有一个文本文件,想要逐行将其发送到网络浏览器。因此,当读取每一行时,它将在浏览器中输出。
我认为JQuery将成为可行的路线,但我从未使用它,因为客户端需要保持连接打开以接收我将要发送的(1000s)行。
这意味着我不确定如何呈现html / javascript页面。这是我的python服务器代码:
from flask import Flask,render_template, request
app = Flask(__name__)
@app.route('/_reader')
def reader():
f = open('/home/ranjeev/Desktop/sample_tweets.dat', 'rb')
for line in f:
print line
return line
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True, port= 8888)
我的HTML代码:
{% extends "layout.html" %}
{% block body %}
<script type=text/javascript>
$(function() {
$.getJSON($SCRIPT_ROOT + '/_reader',
function(data) {
$("#result").text(data.result);
});
return false;
});
</script>
<h1>Coordinates</h1>
<p>
<span id=result>?</span>
{% endblock %}
我真的很感激帮助,因为这似乎是一个非常复杂的问题,我认为不应该这样。
由于
答案 0 :(得分:2)
WebSockets适合这里:http://en.wikipedia.org/wiki/WebSocket
这将允许您将内容发送回浏览器,使用JS提取并继续处理。
答案 1 :(得分:1)
我不知道python,所以这将是相当高的水平,但它完全是关于客户端 - 服务器的关系。
浏览器连接的行为不像开放端口。它期望发出请求,并获得HTTP结构化响应。 HTTP中没有“流式传输”。
也就是说,通过控制等式的两端,你可以伪造它。这与JQuery无关,尽管他们的AJAX库可能很有用,但不是必需的。
要完成此操作,您将把每一行视为单独的AJAX请求。按顺序执行此操作并不算太糟糕。您的请求将如下所示:
使用Javascript完成此操作的绝对最基本的方法如下,其中我假设您的服务器正在发送json对象并将它们编码为{'number':'value','line':'value'},并且它以yourServer / yourService / lineNumber
格式正确响应了restful请求var loginUrl = "http://yourServer/yourService/"
var doRequestLine = function(lineNumber){
$.getJSON(loginUrl+lineNumber, function (data) {
$(document.body).append($("<p>"+data.line+"</p>"))
if(data.number === "end"){return;}
doRequestLine(data.number++);
});
}
doRequestLine(0);
答案 2 :(得分:1)
当您使用XMLHttpRequest
时,您可以在.responseText
仍在加载时阅读,并且您将获得到目前为止已加载的数据。 (你可能想检查最后是否有部分行,如果是的话就将其删除)。
最新标准说,只要收到更多数据,XMLHttpRequest
就会触发progress
事件,因此您可以侦听该事件并呈现新数据。不幸的是,Mozilla Firefox或IE都没有实现progress
事件,因此您只需设置一个计时器并从该计时器中检查.responseText
。
在服务器端,您根本不需要任何花哨的东西;只是发送原始文本。 (即使只是让Web服务器提供.txt文件也没问题。)