2017-01-01 11 views
0

Node.jsフレームワークでPythonスクリプトを実行していて、終了するのに30秒かかります。スクリプトが終了するのを待っている間に、そのページに進捗状況を示したいと思います。スクリプトは7つのファイルを生成するので、ディレクトリにファイル数を表示したい。 AJAXは非同期であり、ブラウザが終了する最初のAJAX要求を待たずに次の行を実行しますので前のリクエストが保留されている間、AJAX応答を継続して送受信します。

var isFinished = false; 
$.ajax({ 
    url: "/process/xlsx/" + uuid, 
    type: "GET", 
    success: function (data) { 
     if (data.status == "success") { 
      $("#infoText").text("finished"); 
      isFinished = true; 
     } else { 
      $("#infoText").text("failed"); 
     } 
    } 
}); 

まず、私は、Pythonスクリプトを実行するページにAJAXリクエストを送信しています私は応答がディレクトリ内のファイルの数になる別の要求を送信しています。以下のコードは正常に問題なく動作します(最初のリクエストを送信しない場合)。

while (!isFinished) { 
    $.ajax({ 
     url: "/process/" + uuid + "/phase", 
     type: "GET", 
     timeout: 1000, 
     success: function (data) { 
      if (data.status == "success") { 
       var numberOfFiles = data.numberOfFiles; 
       $("#infoNumber").text(numberOfFiles); 
      } 
     } 
    }); 
} 

私はAJAXについてよく知らないので、何かが間違っていることを知っています。とにかくこの問題を解決するには?

+0

'while'ループの目的は何ですか? – guest271314

+0

あなたはPythonプロセスを実行するコードを投稿できますか? また、中に問題がある、あなたは間隔を使用する必要があります..それは良いでしょう。 – Alon

+0

@ guest271314、私はそれが継続的に進行状況をチェックしていると思います。 –

答えて

0

私は間隔を置いてそれをすることができました。

var isFinished = false; 

// run python script 
$.ajax({ 
    url: "/process/xlsx/" + uuid, 
    type: "GET", 
    success: function (data) { 
     if (data.status == "success") { 
      $("#numbersNum").text("finished"); 
      isFinished = true; 
     } else { 
      $("#numbersNum").text("failed"); 
     } 
    } 
}); 

var checkDirectory = function() { 
    if (isFinished) { 
     clearInterval(checkDirectoryInterval); 
     return; 
    } 
    $.ajax({ 
     url: "/process/" + uuid + "/phase", 
     type: "GET", 
     success: function (data) { 
      if (data.status == "success") { 
       var numbersNum = data.numberOfFiles; 
       $("#numbersNum").text(numbersNum); 
      } 
     } 
    }); 
}; 

var interval = 2000; 

var checkDirectoryInterval = setInterval(checkDirectory, interval); 
関連する問題