如何取消由 ajaxSubmit() 在 jQuery 中启动的文件上传

How do I cancel a file upload started by ajaxSubmit() in jQuery?

本文关键字:启动 文件 jQuery ajaxSubmit 何取消 取消      更新时间:2023-09-26

>我有类似于以下内容的代码:

UploadWidget.prototype.setup_form_handling = function() {
    var _upload_widget = this;
    $('form#uploader')
    .unbind('trigger-submit-form')  // This might be our company's own method
    .bind('trigger-submit-form', function() {
        var $form = $(this);
        $form.ajaxSubmit({
            dataType: 'json',
            success: function(data, status, xhr, form) {
                // ...
            },
            error: function(xhr, status, errorThrown) {
                // ...
            }
        });
        return false;
    });
};

有没有办法使用表单的重置按钮来取消上传过程?还是我必须导航到当前页面(刷新(才能停止所有内容?

我尝试创建一个由 UploadWidget 对象存储的变量来存储 jqXHR 值(并调用 var _upload_widget.jqXHR = $form.ajaxSubmit({ ... }); (,但我认为我做得不对。

jQuery.ajax()不同,jQuery 表单插件的ajaxForm()ajaxSubmit()不返回 jqXHR 对象。 不过,还有其他方法可以获取 jqXHR 对象:

表单对象上的data()方法(最简单的方法(

ajaxSubmit()返回表单对象。您可以对此表单对象调用 data() 方法来获取 XHR 对象:

var form = $('#myForm').ajaxSubmit({ ... });
var xhr = form.data('jqxhr');

然后在要中止上传时调用xhr.abort()

此功能于 2012 年 12 月添加;请参阅问题 221。(Shukshin.Ivan的回答是第一个指出这一点的。

beforeSend回调(适用于 2012 年 12 月之前的 jQuery Form 版本(

除了 jQuery 表单插件站点中列出的选项外,ajaxForm()ajaxSubmit() 还将采用任何 jQuery.ajax(( 选项。 其中一个选项是beforeSend回调,回调签名为 beforeSend(jqXHR, settings)

因此,指定一个beforeSend回调函数,jqXHR 对象将作为该回调的第一个参数传入。 保存该 jqXHR 对象,然后您可以在要中止上载时对该 jqXHR 对象调用abort()

自 2012 年 12 月起,可以直接访问 xhr:

var form = $('#myForm').ajaxSubmit({ ... });
var xhr = form.data('jqxhr');
....
$('#cancel').on('click', function(){
    xhr.abort();
});

SRC - https://github.com/malsup/form/issues/221

你可以这样使用:

var myForm  = null; 
myForm = $('#myForm').ajaxSubmit({
               url: ajaxUrl,
               beforeSubmit : function() {
                   if(myForm != null)
                      myForm.data('jqxhr').abort();
                   },
               ...
          });

这将停止您以前的 ajaxSubmit 请求。

尝试

window.stop();

模仿正在按下的停止按钮。不完全确定IE是否喜欢它。对于IE,您可以尝试:

document.execCommand('Stop');