如何逐行将文本文件发送到浏览器

时间:2012-11-06 21:19:36

标签: javascript jquery python web-applications flask

我有一个文本文件,想要逐行将其发送到网络浏览器。因此,当读取每一行时,它将在浏览器中输出。

我认为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 %}

我真的很感激帮助,因为这似乎是一个非常复杂的问题,我认为不应该这样。

由于

3 个答案:

答案 0 :(得分:2)

WebSockets适合这里:http://en.wikipedia.org/wiki/WebSocket

这将允许您将内容发送回浏览器,使用JS提取并继续处理。

答案 1 :(得分:1)

我不知道python,所以这将是相当高的水平,但它完全是关于客户端 - 服务器的关系。

浏览器连接的行为不像开放端口。它期望发出请求,并获得HTTP结构化响应。 HTTP中没有“流式传输”。

也就是说,通过控制等式的两端,你可以伪造它。这与JQuery无关,尽管他们的AJAX库可能很有用,但不是必需的。

要完成此操作,您将把每一行视为单独的AJAX请求。按顺序执行此操作并不算太糟糕。您的请求将如下所示:

  1. 浏览器打开 - Javascript要求第1行
  2. Python服务器旋转,发送第1行
  3. 浏览器接收第一行 - Javascript要求第2行......等等
  4. 服务器发送文档结束通知,浏览器停止请求行。
  5. 使用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 FirefoxIE都没有实现progress事件,因此您只需设置一个计时器并从该计时器中检查.responseText

在服务器端,您根本不需要任何花哨的东西;只是发送原始文本。 (即使只是让Web服务器提供.txt文件也没问题。)