0

jQueryを使用したAJAX呼び出しでsuccessメソッドにパラメーターを持つ関数を渡したいのですが、それが私が持っているものです。

makeAjaxReq(callbackFunction, url, xml, 'POST');

function makeAjaxReq(successMethod, url, xml, method, noAsxml) {
    var headers = { 'X-EWS-ACCEPT': 'ASXML', 'X-Requested-With': 'XMLHttpRequest' };
    var call = $j.ajax({
        type: method,
        url: url,
        data: xml,
        headers: headers,
        success: function (data) {
            if (!noAsxml) {
                var json = parseAsXML(data);
                successMethod(json);
            }
            else {
                successMethod(data);
            }
        },
        error: function (data) {
            var a = 0;
        }
    });

コールバック関数でJSONをパラメーターとして受け取ることは良いことですが、次のようなことをしたい場合はどうすればよいでしょうか。

makeAjaxReq(callbackFunction(param1, param2), url, xml, 'POST');

もちろん、そうすると、callbackFunctionは、AJAX呼び出しが行われたときではなく、その瞬間に実行されます。

私はこれをプロトタイプのbind関数で行っていました。

makeAjaxReq(callbackFunction.bind(param1, param2), url, xml, 'POST');

したがって、目標は、コールバック関数でJSON、param1、およびparam2を受け取ることです。

jQueryを使用してそれを行う方法を知っていますか?

お時間をいただき、誠にありがとうございます。Kr、ホセ

4

3 に答える 3

1

これは部分関数で行うことができます:

// getCallbackFunction is called immediately and returns a function
makeAjaxReq(getCallbackFunction(param1, param2), url, xml, 'POST');

// returns a function that accepts one argument and has param1 and param2 in its scope
function getCallbackFunction(param1, param2) {
    return function(json) {
        // code here has access to param1, param2, and json
    }
}

または、無名関数を使用して少し異なるアプローチを実行できます。

makeAjaxReq(function(json){ callbackFunction(json, param1, param2) }, url, xml, 'POST');

ここでは、コールバックに3つの引数を受け入れさせます。最初の引数は、Ajaxの成功時に提供され、最後の2つは、無名関数の構築時に提供されます。

于 2012-12-14T14:09:59.287 に答える
1

これを試して:

makeAjaxReq(function(){callbackFunction(param1, param2)}, url, xml, 'POST');

これは、私がこの質問に答えたものと非常によく似ており、その周りにもう少し情報があります。

于 2012-12-14T13:56:50.850 に答える
0

ちなみに、Jqueryの$ .proxy関数を使用すると、同じことを行うことができますが、背後で何が起こっているのかよくわかりません...

makeAjaxReq($proxy(callbackFunction, param1, param2), url, xml, 'POST');

どうもありがとう!

于 2012-12-14T14:23:21.420 に答える