我需要从嵌套的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;
}
答案 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);
});
}