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

Ter*_*ich 6 javascript forms ajax jquery file-upload

我有类似以下代码:

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;
    });
};
Run Code Online (Sandbox Code Playgroud)

有没有办法使用表格的重置按钮来取消上传过程?或者我是否必须导航到当前页面(刷新)才能停止一切?

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

S. *_*rby 10

不像jQuery.ajax(),ajaxForm()ajaxSubmit()jQuery的形式插件不会返回jqXHR对象.但是还有其他方法可以获取jqXHR对象:

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

ajaxSubmit()返回表单对象.您可以data()在此表单对象上调用该方法以获取XHR对象:

var form = $('#myForm').ajaxSubmit({ ... });
var xhr = form.data('jqxhr');
Run Code Online (Sandbox Code Playgroud)

然后xhr.abort()在您想要中止上传时拨打电话.

此功能已于2012年12月添加; 见问题221.(shukshin.ivan的回答是第一个指出这一点.)

beforeSend 回调(2012年12月之前的jQuery Form版本)

除了在jQuery的形式插件网站上列出的选项,ajaxForm()并且ajaxSubmit()还将采取任何jQuery.ajax()选项.其中一个选项是beforeSend回调,回调签名是beforeSend(jqXHR, settings).

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