2

私はファイルを apache サーバーにアップロードしています。このファイルは別のサーバーに送信され、重い計算が完了するまでに約 10 分かかります。

3番目のサーバーがリクエストを実行している間、30秒ごとにリクエストを送信することで、クライアントとサーバー間の接続をアクティブに保つのに役立つコードをおそらくjQueryで探しています。

setInterval を使用してファイルの存在を確認できる場所を読みましたが、出力ファイルをクライアントに送り返す準備ができたら停止するにはどうすればよいですか。

以下は私のhtmlとjsコードです

echo "<form name=\"cre\" id=\"cre\" action=\"#\" method=\"post\" enctype=\"multipart/form-data\">";
echo "<label for=\"file\">Filename: </label>";
echo "<input type=\"file\" name=\"file\" id=\"file\" ><br><br>";
echo "<label for=\"email\">Email: </label>";
echo "<input id=\"email\" type=\"text\" name=\"email\" maxlength=\"40\"><br><br>";  
echo "<input type=\"submit\" onclick=\"return validate();\" id=\"submit\" value=\"Submit\">&nbsp;&nbsp;";
echo "</form>";
echo "<BR>";
echo "<div id=\"uploader\"></div>";
echo "<BR>";
echo "<div id=\"outdata\">";
echo "</div>";


function keepalive(){
    var feedback = $.ajax({
            type: "POST",
            url: "keepalive.php",
               }).success().responseText;
    $('#outdata').html(feedback);
}

function validate() 
{
    var file = $("#file").val();
    if(!file || file == '' || file == null)
    {
        document.getElementById("outdata").innerHTML="Please select a file";
        return false;
    }   
    var options = {
          target: '#outdata',
          url:'process.php', 
          data:{
             accesstype:"cre"
          },
          beforeSubmit: function() {
             $('#uploader').html('<img src="/images/ajax-loader.gif" />');
             $('input[type=submit]').attr('disabled', true);
          },
          success:  function() {
              $('#uploader').html('');
              clearInterval(sI);
              $('input[type=submit]').attr('disabled', false);
          }
     };
     $('#cre').ajaxSubmit(options);
     var sI = setInterval(keepalive(), 30000);  
     return false;   
}
4

1 に答える 1

1

問題は、スクリプトが sIclearInterval(sI); を呼び出している場所から参照できないことだと思います。そのため、sI をグローバル変数として作成できます。そのため、sI をvar sI=null先頭に宣言します。

これはあなたが望んでいたものかもしれません。

var sI = setInterval(keepalive(), 30000); //place this here 

function validate() 
{
    var file = $("#file").val();
    if(!file || file == '' || file == null)
    {
        document.getElementById("outdata").innerHTML="Please select a file";
        return false;
    }   
    var options = {
          target: '#outdata',
          url:'process.php', 
          data:{
             accesstype:"cre"
          },
          beforeSubmit: function() {
             $('#uploader').html('<img src="/images/ajax-loader.gif" />');
             $('input[type=submit]').attr('disabled', true);
          },
          success:  function() {
              $('#uploader').html('');
              clearInterval(sI);//on success kill the set interval 
              $('input[type=submit]').attr('disabled', false);
          }
     };
     $('#cre').ajaxSubmit(options);
     return false;   
}
于 2013-06-05T04:19:41.677 に答える