我有以下代码显示表格。上传器div部分显示一个gif图像,告诉用户服务器正在处理文件,div'outdata'保存文件处理后ajax调用的输出。我的文件需要很长时间才能在服务器上处理,因为它会在其中传递大量信息。让我们说最后一个文件花了大约12.11分钟。
我的问题是,当我上传一个小文件时,它的效果非常好。响应显示在outdata div部分中。然而,当文件大小更大时,似乎服务器输出文件,因为我通过电子邮件发送给我,但浏览器页面不反映相同。它显示文件仍在处理,图像保留在屏幕上。
1)。浏览器等待ajax发送回responsetext的时间长短 2)。有更好的方法吗?
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\"> ";
echo "</form>";
echo "<BR>";
echo "<div id=\"uploader\"></div>";
echo "<BR>";
echo "<div id=\"outdata\">";
echo "</div>";
这是ajax电话
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('');
$('input[type=submit]').attr('disabled', false);
}
};
$('#cre').ajaxSubmit(options);
return false;
}
答案 0 :(得分:3)
这是您遇到的服务器端超时,而不是客户端。您还没有在Ajax调用中实现error
处理程序,因此它没有看到Apache(及其同类)在30或60秒后自动终止请求(可在apache2.conf
中配置)。 / p>
提高最长请求时间是一个选项,但是一个坏选项,因为它会阻塞服务器资源。最好以异步方式处理它。
您可以使用数据库(在上载时插入作业,让该表中的处理作业更新状态)或使用基于文件夹的普通排队系统(上传到/incoming
来实现系统,cron扫描文件夹并移至/processing
并在完成后删除。
您的网络服务器及其系统负载将会感谢您;)