6

我有类似于以下的代码:

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;
    });
};

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

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

4

4 回答 4

11

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

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

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

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

然后xhr.abort()在您想中止上传时调用。

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

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

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

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

于 2012-08-18T18:35:22.003 回答
2

自 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

于 2015-05-18T13:32:50.783 回答
0

你可以这样使用:

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

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

于 2016-04-12T06:00:48.993 回答
-1

尝试

window.stop();

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

document.execCommand('Stop');
于 2012-05-15T13:49:33.250 回答