jquery - 使用 jQuery 1.2 中止文件上传

标签 jquery ajax file-upload drupal-6

我正在为旧版 Drupal 6 网站开发模块。当前任务是中止自定义海报的预览生成。为此,用户可以上传他的 Logo 并更改一些文本。包含这些信息的表单已提交,并通过 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();
  };
}

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

Returned object

该对象不包含 .abort() 方法并导致“找不到方法”错误。那么我怎样才能中止这个调用呢?

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% 的时间都有效。

关于jquery - 使用 jQuery 1.2 中止文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575197/

相关文章:

javascript - 获取 typeerror 函数不存在错误

php - 性能请求 PHP

javascript - django ajax多表单提交

http - 在通过 HTTP 上传到 Windows 框时,有什么方法可以在文件中找到 "peek"吗?

python - 使用 Flask 上传多个文件

javascript - 查看日期选择器 jQuery 中的可用日期

javascript - 即使没有发出跨源请求,JQuery getJSON CORS 错误?

javascript - jQuery css 瞬间附加到 iframe

javascript - 在html表格中打印json

java - 使用 Springfox 和 Swagger-ui 的多部分文件上传