从2个函数内部返回var

时间:2014-01-10 02:47:04

标签: javascript jquery ajax function return

基本上我需要使用ajax调用从函数内部返回一个变量。

像这样:

function returnStuff(){
  $.ajax({
    //do stuff
  }).done(function(response){
    return response;
  })
return response;
}

我不能只在done函数中使用一个变量并返回它,因为函数只会在调用完成之前返回未定义的变量。

有什么方法可以通过2层函数返回一个变量,还是有一种方法可以让我等到回调完成后才能返回?

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?