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同样获得正确的参数,除了我在.bind这里使用以确保this正确设置为formObject. 如果要在 ES5 之前的浏览器上使用此代码,只需安装一个 shim 即可.bind- 上面链接的 Mozilla 网站上有一个。

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