2017-01-20 7 views
1

フラスコとjQueryを使用して動的に結果を取り込むことを検討しています。Flaskでバックエンドを実行するときにhtmlを動的に設定する

バックエンド関数で長い一連のタスクを実行するプログラムがあり、その結果をリストに追加します。バックエンドの実行が終了するまで(例:Travelocityのようなウェブサイトが、それが見つかるたびに動的にページに飛行を追加する方法)、結果をページに動的に追加する方法がありますか?現在のところ、バックエンドが実行中(結果が返される前に完了するまで待つ)にajaxを使用して結果を更新する方法を理解できません。

私の仮定の例:

$.ajax({ 
     url: '/test', 
     type: 'post', 
     data: 'Begin Running Backend', 
     dataType: 'json', 
     success: function(data) { 
      while(**BACKEND IS RUNNING**){ 
        $("#samplediv").text(data.current_results); 
        } 
       }, 
     error: function(data) { 
      console.log("FAILED"); 
     } 
    }); 

バックエンドにある間:

@app.route("/test",methods=['GET','POST']) 
def test(): 
    run_script() #In this script, a for loop is adding results to a list 
    return jsonify(results=list) 
+0

基本的には、自分のやり方を変える必要があります。 Webソケットに入ることなく、HTTP要求の応答サイクルは1回限りの処理です。サーバーは1回の要求に対して1回だけ応答します。だから、何かを連続的に(ウェブソケットなしで)更新するには、サーバーからの結果を要求するものを書いてから、サーバーが「要求開始」信号のように送り返し、クライアントが定期的にサーバーに結果を問い合わせますこれまで収集された要求のうちの1つになるまで、サーバーは「これ以上の結果」信号を出さない。 TravelocityはおそらくWebソケットを使用します。 – bryan60

答えて

1

サーバーが良好に応答するまで、あなたがsuccessコールバックを受け取ることはありませんようごwhileループは、ここでは必要ありません。その後

timeout: 60000 

あなたは1分にそれを放棄するには、以下の追加することができます:あなたはencouteringすることができる

最大の問題は、しかし、長い応答時間にtimeout可能ですあなたの成功の機能で、結果からloggingで始まる:あなたはこのようにして、クライアント側を一時停止する必要はありません

success: function (data) { 
    console.log(data); 
} 

whileループ。

関連する問題