从嵌套回调函数中提取返回值

时间:2014-04-22 17:21:18

标签: javascript jquery ajax callback

为了简化我的问题,我对代码进行了一些修改。我现在能够从回调函数中获取值,我现在想将这些数据传递给变量。

的Javascript

如何让PostInformation返回args?

function AjaxRequest(callback) {

    var hasErrors = false;
    dojo.xhrPost({
        url: 'hello',
        content: SomeData,
        load: function (formErrors) {
            //preform some operation 
            //set hasErrors to true
            hasErrors = true;

            if (typeof callback === "function") callback(hasErrors);
        },
        error: function (e) {
            console.log(e + ' page not posted error');

        }

    });
}

function PostInformation() {
    try {
        AjaxRequest(function (args) {
            console.log('The hasErrors is  ' + args);
            return args;
        });

    } catch (e) {
        console.log(e);
    }
}

2 个答案:

答案 0 :(得分:2)

您在发送请求时调用handleServerResponse,而不是在回调中。它应该是:

var doesErrorsExist = postToServer(function() {
    handleServerResponse(containers, function (args) {
        return args;
    });
});

但这仍然无法工作 - 异步函数永远不会向调用者返回一个值,因为在函数返回后操作完成之前,该值不会存在。

我还没有试图弄清楚你想要做的所有事情的逻辑,所以我没有具体的建议如何解决这个问题。我想如果你重读你所链接的问题,你应该获得更多的见解。

答案 1 :(得分:0)

经过一些测试,我意识到我只需要AjaxRequest函数在函数末尾返回数据并声明一个等于AjaxRequest的变量,并使用回调函数返回其值。下面是我的代码。

如果此解决方案不合适,请发表评论。

function AjaxRequest(callback) {

    var hasErrors = false;
    dojo.xhrPost({
        url: 'hello',
        content: SomeData,
        load: function (formErrors) {
            //preform some operation 
            //set hasErrors to true
            hasErrors = true;

            //if (typeof callback === "function") callback(hasErrors);
        },
        error: function (e) {
            console.log(e + ' page not posted error');

        }

    });

    return hasErrors;
}

function PostInformation() {
    try {
        var results = AjaxRequest(function (args) {
            //console.log('The hasErrors is  ' + args);
            return args;
        });

        return results;

    } catch (e) {
        console.log(e);
    }
}