Javascript 如何检查用户是否中断了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

我使用这段代码通过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.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:添加到我的答案中