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.ajax()、jQueryフォームプラグインは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()ます。オプションの1つはコールバックであり、コールバック署名はです。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 に答える