使用参数扩展回调

时间:2016-08-08 15:26:49

标签: javascript jquery

假设我有一个包装jQuery ajax方法的方法:

function GetJson(url, completeCallback, alwaysCallback, failCallback) {   
var newUrl = location.protocol + "//" + location.host + url;

$.getJSON(newUrl).done(function (result) {
    if (typeof completeCallback == "function") {
        completeCallback(result);
    }                
}).fail(function (jqxhr, textStatus, error) {
    if (typeof failCallback == "function") {
        failCallback(result);
    } else {
        alert("Request failed for " + url + " textStatus:" + textStatus + " Error:" + error);
    }        
}).always(function () {
    if (typeof alwaysCallback == "function") {
        alwaysCallback();
    }        
}); }

我调用DoSomething方法,它在内部调用GetJson。 GetJSON回调的结果我想作为DoResume的第一个参数传递;其余的参数应该从方法签名中传递。

function DoSomething(a, b, c, id) {
var url = '/MyController/GetData?id=' + id;    
GetJson(url, DoResume(this.Result, a, b, c)); }

function DoResume(result, a, b, c) { }

我尝试使用此关键字实现此目的,但未分配结果。

2 个答案:

答案 0 :(得分:3)

您需要传递函数而不是其调用的结果

GetJson(url, function(result){
    DoResume(result, a, b, c);
});

答案 1 :(得分:1)

在您的示例中,您没有将DoResume传递给SendJSON,而是调用 DoResume,然后传递其结果。你需要传递一个函数。

SendJSON( url, null, function( result ) {
    DoResume( result, a, b, c );
} );