中止多文件上传 AJAX 请求

Posted

技术标签:

【中文标题】中止多文件上传 AJAX 请求【英文标题】:Abort a multiple file upload AJAX request 【发布时间】:2015-01-02 22:44:45 【问题描述】:

我正在尝试使用进度条中止多文件上传,显示过程状态。

我想要实现的是在中止按钮单击时完全中止多个文件上传;停止进度条并清除在最初触发的多文件上传过程中可能已上传的每个文件。

下面是我的代码:

var AJAX = $.ajax( 
    xhr: function() 
        var XHR = new window.XMLHttpRequest();

        XHR.upload.addEventListener('progress', function(e) 
          if (e.lengthComputable) 

            var PROGRESS = Math.round((e.loaded/e.total)*100);
            $('#PROGRESS_BAR').text(PROGRESS);

         , false); return XHR; ,
    url        : '/php.php',
    type       : 'POST',
    data       : DATA,
    cache      : false,
    processData: false,
    contentType: false,
    beforeSend : function()  , 
    success    : function()   
);

$(document).on('click', '.ABORT', function(e)      
    AJAX.abort();
);

我使用上面的代码来动态上传带有进度条的图片。

我发现很多文章使用.abort() 来停止进程,但这似乎只适用于浏览器端而不是服务器端。

我可以通过什么方式完全停止上传:在客户端和服务器端,.abort() 无法让我获得理想的结果?

【问题讨论】:

【参考方案1】:

试试这个:

var XHR = new window.XMLHttpRequest();
var AJAX = $.ajax( 
    xhr: function() 
        XHR.upload.addEventListener('progress', function(e) 
          if (e.lengthComputable) 

            var PROGRESS = Math.round((e.loaded/e.total)*100);
            $('#PROGRESS_BAR').text(PROGRESS);

         , false); return XHR; ,
    url        : '/php.php',
    type       : 'POST',
    data       : DATA,
    cache      : false,
    processData: false,
    contentType: false,
    beforeSend : function()  , 
    success    : function()   
);

$(document).on('click', '.ABORT', function(e)      
    XHR.abort();
);

【讨论】:

能否请您澄清一下您的代码和@user3565264 代码之间的区别?当用户取消上传时,服务器端的清理过程如何处理? 变化是 XHR 的可见性。将其移出功能后,单击功能可见。请看:w3schools.com/js/js_scope.asp

以上是关于中止多文件上传 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章

上传大图像时网络连接中止后恢复或重新启动ajax请求?

按退出键中止 AJAX 文件上传

PrimeFaces 4.0/JSF 2.2.x 中的文件上传不适用于 AJAX - javax.servlet.ServletException:请求内容类型不是多部分/表单数据

HTML5多文件上传:通过AJAX一一上传

AJAX多文件上传

HTML5 使用 AJAX 上传多个文件?