2

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

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

function makeRequest(command, postData){

    var returnData;

    $.ajax({

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

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

    return returnData;
}
4

3 回答 3

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

一切都会奏效

于 2012-04-17T10:24:28.517 回答
0

你不能。异步事件不是这样工作的。

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

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

于 2012-04-17T10:23:48.643 回答
0

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

function makeRequest(command, postData){
    $.ajax({
        url: 'call.php?command='+command,
        data: postData,
        type: 'POST'
    }).done(function(data){
        HandleCallBack(data);
    });
}
于 2012-04-17T10:24:04.927 回答