Javascript 如何检查用户是否中断了ajax上载
我使用这段代码通过ajax将文件上载到我的网站:Javascript 如何检查用户是否中断了ajax上载,javascript,jquery,ajax,asyncfileupload,Javascript,Jquery,Ajax,Asyncfileupload,我使用这段代码通过ajax将文件上载到我的网站: jQ(document).on('submit', '#upload_file', function(e) { e.preventDefault(); jQ('#mensagem').html('<div class="loader" style="text-align: center;">Enviando arquivo...</div>'); jQ.ajaxFileUploa
jQ(document).on('submit', '#upload_file', function(e) {
e.preventDefault();
jQ('#mensagem').html('<div class="loader" style="text-align: center;">Enviando arquivo...</div>');
jQ.ajaxFileUpload({
url :'<?php echo base_url('chamados/anexar_arquivo')?>',
secureuri :false,
fileElementId :'userfile',
dataType : 'json',
data : {
'desc' : jQ('#desc').val(),
'chamado' : jQ('#codigochamado').val()
},
success : function (data, status)
{
if(data.status != 'error')
{
jQ('#anexos').html('Carregando anexos...');
refresh_files();
jQ('#desc').val('');
var alert = '<div class="alert alert-success fade in"><button type="button" class="close" data-dismiss="alert">×</button>';
}
else
{
var alert = '<div class="alert alert-danger fade in"><button type="button" class="close" data-dismiss="alert">×</button>';
}
jQ('#mensagem').html(alert+data.msg+'</div>');
}
});
});
jQ(document).on('submit','upload#u file',函数(e){
e、 预防默认值();
jQ('mensagem').html('Enviando arquivo…');
jQ.ajaxFileUpload({
url:“”,
secureuri:false,
fileElementId:'userfile',
数据类型:“json”,
数据:{
“desc”:jQ(“#desc”).val(),
“chamado”:jQ(“#codigochamado”).val()
},
成功:功能(数据、状态)
{
if(data.status!=“error”)
{
jQ('#anexos').html('Carregando anexos…');
刷新_文件();
jQ('#desc').val('');
变量警报='×';
}
其他的
{
变量警报='×';
}
jQ('mensagem').html(alert+data.msg+'');
}
});
});
而且效果很好!用户选择文件,单击“上载”,然后我加载一个正在加载的gif,直到它被成功或错误消息替换
问题是,当文件上载时,它会显示在浏览器上,您可以单击浏览器上的“X”按钮取消呼叫。当我这样做时,加载的gif不会消失,它会一直显示“上传文件…”,即使上传过程被中止
有没有办法检查上传是否被中止,以便我可以用“用户中止上传”消息更新屏幕
我在ajax调用的参数上尝试了
error:function(e){}
,但当进程中止时,它似乎没有传递到那里。编辑:有一个HTML5事件,progress
,当它在几秒钟内没有显示更改时,您可以检查更改并停止ajax,以及上传动画。看起来你正在使用一些文件上传插件,所以我不确定是否可以轻松完成。使用纯jQuery时,它可能如下所示。注意,我根本没有测试过这个,但它至少可以提供一个起点。编辑数字120
,更改检查上传进度之间等待的时间(秒):
var lastProgress;
var lastTime = new Date() / 1000;
$.ajax( {
xhr: function(){
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt){
var newTime = new Date() / 1000;
if (newTime > lastTime + 120){
if (evt.lengthComputable) {
if (evt.loaded == lastProgress) {
...[stop the upload graphic etc]...
} else {
lastTime = newTime;
lastProgress = evt.loaded;
}
}
}, false);
return xhr;
},
url: ...
... [and the rest of the ajax parameters] ...
});
原始答案:我知道这是一种逃避,但您可以在表单中提供自己的停止按钮。如果用户想要取消上传,您可以指示他们单击它,而不是浏览器停止按钮
据我所知,似乎没有一种方法能够真正检测到对浏览器停止按钮的点击
另请参见:为什么不在用户单击“取消”后立即删除加载器和文本?取消操作是否可能失败?如果取消失败,您可以随时返回加载器和文本。我的表单上没有取消按钮,我所说的取消是指浏览器上的“停止”按钮。因为浏览器显示它正在加载内容,用户可以中止它,我以前从未使用过它,但是您可以尝试一下,当ajax调用完成时,它就可以工作了。即使我创建了一个“取消”按钮,浏览器上的“停止”按钮仍然可以单击。这就是问题所在:我无法检测何时单击它。@VictorHugo:这就是通知用户不要使用停止按钮的意义所在。我在上面的答案中添加了一些我发现的东西。@VictorHugo:添加到我的答案中