2016-02-19 72 views
0

我有这种情况,我必须通过AJAX检查某些内容,然后返回结果。 或简化:AJAX调用后从嵌套函数返回

function isValid() { 
    $.ajax(URL, data, function(response) { 
     isValid = response; 
    }); 
    return isValid; 
} 

但仍然无法使它。

我可以访问响应,但我不能让isValid返回后我得到响应。 例如解决我遇到无处不在:

function isValid() { 
    function checkOnServer(callback) { 
     $.ajax(URL, data, function(response) { 
      callback(response); 
     }); 
    } 
    checkOnServer(function(response) { 
     alert(response); 
    }); 
} 

我遇到了这个遍布#1,但问题是:

  1. 我不想提醒这一点。
  2. 我想从isValid()返回它。

===========================

编辑:我忘了提,如果你/我/我们尝试简单地从“checkOnServer”中“返回” - 它只会将其返回到AJAX的成功回调。但这里的目标是让“isValid”返回结果...... :)

+3

不能从异步方法返回。您正在尝试将送货披萨送到您的房子之前。您需要使用回调或承诺。你需要改变你的逻辑。 – epascarello

+2

可能重复[如何返回来自异步调用的响应?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Hatchet

回答

0

你的代码是合理的,但是你在isValid()中使用你的回调函数,所以它不提醒!,我也有点点改变你的Ajax功能如下

function isValid() { 
    checkOnServer(function(response) { 
    alert(response); 
    }); 
} 
function checkOnServer(callback) { 
    $.ajax({ 
     url : URL, 
     data : data, 
     success : function(response) { 
      callback(response); 
     } 
    }); 
} 

编辑

变量是不能从异步方法返回吗?如果我们调用使用Ajax功能,通话功能立即运行之前,首先阿贾克斯响应,所以它会仅使用上述方法返回undefined。 AJAX功能后

There is two method I've know to return from asynchronous function

调用完成

function isValid() { 
    var data; 
    checkOnServer(function(response) { 
    data = response; 
    }); 
    return data; 
} 
function checkOnServer(callback) { 
    $.ajax({ 
     url : URL, 
     data : data, 
     async : false    
    }).done(function(response){ 
     callback(response); 
     }); 
} 
console.log(isValid()); 

分配变量,responseText

function isValid() { 
var data = checkOnServer(); 
return data; 
} 
function checkOnServer() { 
    var data = $.ajax({ 
       url : URL, 
       data : data, 
       async : false //must set async to false 
       }); 
    return data.responseText; 
} 
console.log(isValid()); 
+0

而在你的表扬 - 你如何使isValid()返回响应? –

+0

回调函数不能返回变量,因此我们将所有回调函数中的代码都做了回调函数。您希望如何处理回调函数? ,这样做isValid() –

+0

“isValid”是遗留的,我必须使用它。我唯一能做的就是在那里添加东西并修改“返回”声明。 (但为了执行验证,它总是应该返回“true”或“false”。) –