0

サーバー側の手順 (実際には ffmpeg の再エンコード) の進捗情報を表示したいと考えています。私が考えた最善の方法は、次のように myscript で 2 つの異なる $.ajax() 呼び出しを使用することでした。

1) フォームが送信されると (再エンコードがトリガーされます)、1 つの $.ajax() が次のように再エンコードを開始します。

   $.ajax({  
    type: "GET",  
    url: "runffmpeg.php",  
    data: dataString,  
    success: function(data, textStatus, XMLHttpRequest) {  
            //clearInterval(repeat);
            location.reload(); 
        }});

2) 次に、2 回目の $.ajax() 呼び出しは、次のように、結果のファイルのサイズの監視を開始して、訪問者に進行状況を通知します。

    $.ajax({  
        type: "GET",  
        url: "checkprogress.php",  
        data: dataString,  
        success: function(data, textStatus, XMLHttpRequest) {                   
                $('#submitted').html(data);
            }
    });

実際には、進行状況を示すために、この呼び出しは 1 秒の setInterval 内で行う必要があります。

もちろん、これは機能しません(または、なぜ投稿する必要があるのですか)、同時に2つのajax呼び出しを行うという参照が見つかりません。

4

2 に答える 2

2

同時に 2 つの ajax 呼び出しを行うことはまったく問題ありません。ただし、戻るのに 1 秒以上かかる場合、checkprogress.php を複数回呼び出すことになる可能性があるため、は使用しません。setIntervalおそらくタイムアウト後に、success メソッドで新しい ajax リクエストを起動することをお勧めします。たとえば、次のようになります。

function checkProg(){
  $.ajax({  
      type: "GET",  
      url: "checkprogress.php",  
      data: dataString,  
      success: function(data, textStatus, XMLHttpRequest) {                   
              $('#submitted').html(data);
              if (/* not yet complete */) {
                setTimeout(checkProg,500);
              }
          }
  });
}
于 2010-04-15T16:26:30.497 に答える
0

同時にアクティブにできる ajax リクエストの数には制限があります。これはブラウザに依存し、3 に近いはずです。2 つのリクエストを同時にアクティブにすることは可能だと思いますが、これはお勧めできません。

私が提案するのは、コマンドの受信を確認して、フォームの送信にすぐに応答するようにサーバー コードを再設計することです。次に、進行状況を表示するためにポーリングを使用します。

于 2010-04-15T13:38:36.203 に答える