使用 jQuery 1.2 中止文件上传

Abort fileupload with jQuery 1.2

我正在为旧版 Drupal 6 网站开发模块。当前任务是中止自定义海报的预览生成。为此,用户可以上传他的徽标并更改一些文本。提交包含这些信息的表单,并通过 ahah 显示预览。

根据几个教程我必须这样做:

var xhrPool = [];
$(document).ajaxSend(function(e, jqXHR, options){
  console.log(jqXHR);
  xhrPool.push(jqXHR);
});
$(document).ajaxComplete(function(e, jqXHR, options) {
  xhrPool = $.grep(xhrPool, function(x){return x!=jqXHR});
});

及以后:

function abortAll() {
  hideEverything();
  for (var i = xhrPool.length - 1; i >= 0; i--) {
    xhrPool[i].abort();
  };
}

如果我在除文件上传之外的所有字段中输入信息,日志 returns 一个可以正确中止的有效 XmlHttpRequest 对象。但是,如果我上传文件,.ajaxSend 不包含有效的 XmlHttpRequest 对象。示例:

此对象不包含 .abort() 方法并导致 "method not found" 错误。那么我怎样才能中止这个电话呢?

jQuery版本为1.2.6,无法更新。解决方案必须跨浏览器兼容。

一个可行的解决方案如下(我碰巧遇到了与 Drupal 6,Jquery 1.2 相同的问题):

for (var i = xhrPool.length - 2; i >= 0; i--) {
  if (xhrPool[i] instanceof XMLHttpRequest) {
    xhrPool[i].abort();
  } else {
    window.stop();
  }
};

在这种情况下,您只需检查您是否有正确的 XMLHttpRequest,如果是,则按正常方式执行。如果不这样做,您只需中止所有 运行 请求。

它并不完美,但在大约 90% 的时间里它都能正常工作。