2012-11-06 59 views
0

我有一个文本文件,并且希望将它逐行发送到Web浏览器。所以每行都被读取,它会在浏览器中输出。如何将文本文件按行发送到浏览器行

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

事实是,在客户端收到它之后试图从服务器端修改网页基本上是不可能的。可能有JS解决方法,但事实是,检索网页是一笔交易。 – pydsigner

+0

我遇到的问题是服务器如何通过进行某种持久连接来持续向客户端推送数据,甚至可以接收实时数据。 – user94628

+0

通过不使用HTTP ;-) – pydsigner

回答

2

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

这将允许你将内容发送回浏览器,用JS把它捡起来继续你正在处理那里。

+0

谢谢,我用WebSockets和龙卷风,这似乎写出了线。它也似乎是发送实时数据给客户端浏览器,我希望它做。 – user94628

1

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

浏览器连接不会像打开的端口那样工作。它期望提出请求,并获得HTTP结构化响应。 HTTP中没有“流式传输”。

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

要做到这一点,您需要将每一行视为单独的AJAX请求。按顺序做这件事并不算太坏。你的请求是这样的:

  1. 浏览器打开 - javascript去询问1号线
  2. Python的服务器旋转起来,把1号线
  3. 浏览器临危行一个 - 的Javascript询问2号线...等
  4. 服务器发送文档通知结束,浏览器停止请求行。

使用Javascript完成此操作的绝对最基本的方法如下,其中我假设您的服务器发送json对象并将它们编码为{'number':'value','line':'value “},而且它能够正确响应格式RESTful请求yourServer/yourService/LINENUMBER

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); 
1

当你使用XMLHttpRequest,你可以阅读.responseText当它仍在加载,你会得到这一直是该数据加载到目前为止。 (你可能想检查一下是否有一个部分行,如果是这样的话就把它切掉)。

最新标准说XMLHttpRequest会在收到更多数据时触发progress事件,因此您可以侦听该事件并呈现新数据。不幸的是,Mozilla FirefoxIE都没有实现progress事件,所以您必须设置一个计时器并从该计时器中检查.responseText

在服务器端,你根本不需要任何东西;只需发送原始文本。 (即使只是让Web服务器为.txt文件提供服务也没关系)。

相关问题