从嵌套异步ajax调用返回结果

时间:2012-04-17 10:21:35

标签: javascript jquery ajax

我需要从嵌套的ajax调用返回数据,但还需要ajax调用以保持异步。

我发现了一些相关问题,但无法在下面的情况下使用它。我假设在ajax调用完成之前返回returnData,但我找不到解决方案。

function makeRequest(command, postData){

    var returnData;

    $.ajax({

        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'

    }).done(function(data){
        returnData = data;
    });

    return returnData;
}

3 个答案:

答案 0 :(得分:4)

是的,因为此调用是异步returnData立即返回。如果你需要使用returndata将它传递给回调中的函数

function makeRequest(command, postData, functionToCallAfterAjax){

    var returnData;

    $.ajax({

        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'

    }).done(function(data){
        functionToCallAfterAjax(data);
    });


}

当然,您可以将该函数作为参数传递。

这意味着如果你的代码是这样做的话:

var returnedData = makeRequest(command, postData);
anotherFunction(returnedData);

你应该简单地(使用上面的代码)

makeRequest(command, postData, anotherFunction);

一切都会有效

答案 1 :(得分:0)

你做不到。异步事件不起作用。

发送HTTP请求,然后触发它的函数立即继续。在HTTP响应到达之前,不会触发回调,但调用函数将在哪个时间结束。

您必须让您的回调(您传递给done()的功能)执行所需的任何进一步处理。

答案 2 :(得分:0)

returnData函数运行之前,您将返回.done()的值。通过将接收的数据传递给函数进行处理来纠正您的代码:

function makeRequest(command, postData){
    $.ajax({
        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'
    }).done(function(data){
        HandleCallBack(data);
    });
}