在AJAX调用后从嵌套函数返回

时间:2016-02-19 14:55:00

标签: javascript ajax function nested return

我有这种情况,我必须通过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);
    });
}

我在Stackoverflow上遇到过这个问题,但问题是:

  1. 我不想提醒这个。
  2. 我想从isValid()返回它。
  3. ===========================

    编辑:我忘了提及如果你/我/我们试着简单地"返回"来自" checkOnServer" - 它只会将它返回给AJAX的成功回调。但这里的目标是让#is; isValid"返回结果...:)

1 个答案:

答案 0 :(得分:0)

你的代码是明智的,但你在isValid()中使用你的回调函数,所以它不会警告!,我也有点改变你的ajax函数

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

修改

变量是不能从异步方法返回的?如果我们用ajax调用函数,则在ajax响应之前立即先运行调用函数,所以只用上面的方法返回undefined。

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

ajax功能完成后调用

 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());