基本上我需要使用ajax调用从函数内部返回一个变量。
像这样:
function returnStuff(){
$.ajax({
//do stuff
}).done(function(response){
return response;
})
return response;
}
我不能只在done函数中使用一个变量并返回它,因为函数只会在调用完成之前返回未定义的变量。
有什么方法可以通过2层函数返回一个变量,还是有一种方法可以让我等到回调完成后才能返回?
答案 0 :(得分:1)
没有。您无法在JavaScript中同步等待/阻止。你能做的最好是:
function returnStuff(){
return $.ajax({
//do stuff
}).done(function(response){
// handle some stuff
});
}
returnStuff().done(function() {
// add a 2nd event handler (called after the one above)
});
您必须重新构建代码,而不是立即取回结果。
答案 1 :(得分:-1)
使用jquery ajax async选项。这将使请求阻塞而不是异步 - 请注意,这可能导致UI在请求发生时锁定,因此我同意Mark您应该将代码体系结构更改为不需要设置async false,但这确实回答了您的问题
function returnStuff(){
var ret;
$.ajax({
async: false,
//do stuff,
success: function(response) {
ret = response;
}
});
return ret;
}
请注意,有一篇非常好的文章解释了为什么你不应该在这里做到这一点:How do I return the response from an asynchronous call?