如何在jQuery中取消由ajaxSubmit()启动的文件上传?
我的代码类似于以下内容:
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表单插件的ajaxSubmit()
ajaxForm()
和ajaxSubmit()
不返回jqXHR对象。 但是还有其他方法可以获取jqXHR对象:
表单对象上的data()
方法(最简单的方法)
ajaxSubmit()
返回表单对象。 您可以在此表单对象上调用data()
方法以获取XHR对象:
var form = $('#myForm').ajaxSubmit({ ... }); var xhr = form.data('jqxhr');
然后在想要中止上传时调用xhr.abort()
。
此function于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(); });
你可以这样使用:
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');