0

テキスト ファイルがあり、それを 1 行ずつ Web ブラウザに送信したいと考えています。したがって、各行が読み取られると、ブラウザに出力されます。

私はJQueryが取るべきルートだと思いますが、送信する(数千の)行を受信するためにクライアントが接続を開いたままにしておく必要があるため、これを使用したことはありません。

これは、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 %}

これは非常に複雑な問題であり、そうあるべきではないと思うので、本当に助けていただければ幸いです。

ありがとう

4

3 に答える 3

2

WebSocket はここに収まります: http://en.wikipedia.org/wiki/WebSocket

これにより、コンテンツをブラウザに送り返し、JS で取得して、そこで処理を続けることができます。

于 2012-11-06T21:27:13.860 に答える
1

を使用している場合は、まだロードされているときにXMLHttpRequest読み取ることができ、これまでにロードされたデータを取得できます。.responseText(最後に部分的な行があるかどうかを確認し、そうであれば切り落とすことをお勧めします)。

最新の標準では、より多くのデータが受信されるたびXMLHttpRequestにイベントが発生するため、そのイベントをリッスンして新しいデータをレンダリングできます。progress残念ながら、Mozilla FirefoxIEprogressもこのイベントを実装していないため、タイマーを設定.responseTextしてそのタイマーから確認するだけで済みます。

サーバー側では、凝ったものはまったく必要ありません。生のテキストを送信するだけです。(Web サーバーに .txt ファイルを提供させるだけでも問題ありません)。

于 2012-11-06T21:39:37.863 に答える
1

私はPythonを知らないので、これはかなり高レベルになりますが、クライアントとサーバーの関係がすべてです。

ブラウザ接続は、開いているポートのようには動作しません。リクエストを行い、HTTP 構造化されたレスポンスを取得することを期待しています。HTTP には「ストリーミング」はありません。

とはいえ、方程式の両端を制御すれば、それを偽造することができます。これは JQuery とは何の関係もありませんが、JQuery の AJAX ライブラリは便利かもしれませんが、必須ではありません。

これを実現するには、各行を個別の AJAX リクエストとして扱います。これを順番に実行することはそれほど悪くありません。リクエストは次のようになります。

  1. ブラウザが開きます - Javascript が 1 行目を要求します
  2. Python サーバーが起動し、1 行目を送信します
  3. ブラウザが 1 行目を受信 - Javascript が 2 行目を要求...など
  4. サーバーはドキュメントの終わり通知を送信し、ブラウザーは行の要求を停止します。

Javascript を使用してこれを達成するための最も基本的な方法は次のとおりです。ここで、サーバーが json オブジェクトを送信し、それらを {'number':'value','line':'value'} としてエンコードしていると仮定しました。 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);
于 2012-11-06T21:38:20.587 に答える