Javascript 从嵌套异步ajax调用返回结果
我需要从嵌套的ajax调用返回数据,但也需要ajax调用保持异步 我发现了一些相关的问题,但在下面的情况下无法使其工作。我假设在ajax调用完成之前返回了Javascript 从嵌套异步ajax调用返回结果,javascript,jquery,ajax,Javascript,Jquery,Ajax,我需要从嵌套的ajax调用返回数据,但也需要ajax调用保持异步 我发现了一些相关的问题,但在下面的情况下无法使其工作。我假设在ajax调用完成之前返回了returnData,但我找不到解决方案 function makeRequest(command, postData){ var returnData; $.ajax({ url: 'call.php?command='+command, data: postData, t
returnData
,但我找不到解决方案
function makeRequest(command, postData){
var returnData;
$.ajax({
url: 'call.php?command='+command,
data: postData,
type: 'POST'
}).done(function(data){
returnData = data;
});
return returnData;
}
你不能。异步事件不是这样工作的 HTTP请求被发送,然后触发它的函数立即继续。在HTTP响应到达之前不会触发回调,但调用函数将在何时结束
您必须让回调函数(您要传递给
done()
)执行所需的任何进一步处理。您不能。异步事件不是这样工作的
HTTP请求被发送,然后触发它的函数立即继续。在HTTP响应到达之前不会触发回调,但调用函数将在何时结束
必须让回调函数(传递给
done()
的函数)执行所需的任何进一步处理。在.done()
函数运行之前返回returnData
的值。通过将接收到的数据传递给函数进行处理来更正代码:
function makeRequest(command, postData){
$.ajax({
url: 'call.php?command='+command,
data: postData,
type: 'POST'
}).done(function(data){
HandleCallBack(data);
});
}
在运行
.done()
函数之前,您正在返回returnData
的值。通过将接收到的数据传递给函数进行处理来更正代码:
function makeRequest(command, postData){
$.ajax({
url: 'call.php?command='+command,
data: postData,
type: 'POST'
}).done(function(data){
HandleCallBack(data);
});
}
是,因为此调用是异步返回数据,所以会立即返回数据。如果需要使用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);
您应该做的很简单(使用上面的代码)
而且一切都将正常运行是的,因为此调用是异步返回的。数据将立即返回。如果需要使用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);
您应该做的很简单(使用上面的代码)
一切都会正常运行。将返回放入.done回调中。@Aidanc-哪个将数据返回到…where?将返回放入.done回调中。@Aidanc-哪个将数据返回到…where?