我正在为旧版 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 对象。示例:
该对象不包含 .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/