3

jQuery の promise オブジェクトによってトリガーされるコールバック関数にパラメーターを渡す方法を見つけようとしています。ajax を呼び出してから promise メソッドを呼び出す私のメソッドは次のようになります。

var formObject = {
    call : function(thisForm, thisUrl, thisArray, thisCallback) {
        "use strict";
        var thisMethod = thisForm.attr('method').toUpperCase();
        var thisPromise = $.ajax({
            type : thisMethod,
            url : thisUrl,
            dataType : 'json',
            data : thisArray,
            cache : false
        });
        thisPromise.done(thisCallback(data, textStatus, jqXHR));
        thisPromise.fail(formObject.topError(jqXHR, textStatus, errorThrown));
    }
};

done() メソッドと fail() メソッドのパラメーターは正しくありませんが、これはまさに私が把握しようとしているものです。

4

3 に答える 3

2

追加のクロージャーを提供する必要はありません-以下の行は正常に機能するはずです:

thisPromise.done(thisCallback);
thisPromise.fail(formObject.topError.bind(formObject));

doneコールバックには、によって指定されたパラメータが渡されdata, textStatus, jqXHRます$.ajax。この行は、提供されたコールバック関数を直接登録しているだけです。

コールバックは、正しく設定されていることを確認するためにここでfail使用したことを除いて、同様に正しいパラメーターを取得します。このコードをES5より前のブラウザで使用する場合は、シムをインストールするだけです。上記のリンク先のMozillaサイトにシムがあります。.bindthisformObject.bind

于 2012-08-06T07:43:33.910 に答える
1

代わりに書いてみてください

thisPromise.done(function(data, textStatus, jqXHR) { 
    thisCallback(data, textStatus, jqXHR); 
});
thisPromise.fail(function(jqXHR, textStatus, errorThrown) { 
     formObject.topError(jqXHR, textStatus, errorThrown); 
});

両方のコールバックを関数内にラップする

于 2012-08-06T07:39:42.673 に答える
1

クロージャーを使用する:

var formObject = {
    call : function(thisForm, thisUrl, thisArray, thisCallback) {
        "use strict";
        var thisMethod = thisForm.attr('method').toUpperCase();
        var thisPromise = $.ajax({
            type : thisMethod,
            url : thisUrl,
            dataType : 'json',
            data : thisArray,
            cache : false
        });
        thisPromise.done(function(data, textStatus, jqXHR) {
                 thisCallback(/* additional parameters*/)
        });
..........................
    }
};
于 2012-08-06T07:40:21.610 に答える