0

我想在使用 jQuery 的 AJAX 调用中将带参数的函数传递给成功方法,这就是我所拥有的:

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 调用完成时执行。

我曾经使用原型中的绑定函数来做到这一点,例如:

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

所以目标是在我的回调函数中接收 JSON、param1 和 param2

你知道使用 jQuery 的方法吗?

非常感谢您的时间。克鲁,何塞

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

在这里,您的回调接受三个参数,第一个在 Ajax 成功时提供,最后两个在构造匿名函数时提供。

于 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 回答