2

我正在将一个文件上传到我的 apache 服务器,该服务器将其发送到另一台服务器进行繁重的计算,大约需要 10 分钟才能完成。

我正在寻找一个可能在 jQuery 中的代码,它可以通过在第三台服务器执行请求时每 30 秒发送一次请求来帮助我保持客户端和服务器之间的连接处于活动状态。

我在某处读到我可以使用 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

我认为问题是脚本无法 sI从您调用 clearInterval(sI) 的位置引用;所以你可以把 sI 作为一个全局变量。所以var sI=null在顶部声明 sI。

可能这就是你想要的。

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 回答