2012-04-17 55 views
2

我需要从嵌套的ajax调用中返回数据,但也需要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; 
} 
+0

把返回的内部.done回调。 – Aidanc 2012-04-17 10:23:18

+0

@Aidanc - 它会将数据返回...在哪里? – Quentin 2012-04-17 10:25:59

回答

4

是因为这个调用是异步returnData立即返回。如果您需要在回调

function makeRequest(command, postData, functionToCallAfterAjax){ 

    var returnData; 

    $.ajax({ 

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

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


} 

当然使用returndata把它传递给一个函数,你可以传递给函数的参数来调用。

这意味着,如果你的代码是为了做:

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

你应该做的只是(使用上面的代码)

makeRequest(command, postData, anotherFunction); 

,一切都将工作

+0

谢谢,那就是了! – Boyd 2012-04-17 10:32:12

0

你不能。异步事件不能像那样工作。

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

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

0

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

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