使用 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% 的时间里它都能正常工作。
我正在为旧版 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% 的时间里它都能正常工作。