返回数据后阿贾克斯是行不通的

问题描述:

我想检索数据使用$ .post并将其存储为返回类型。但是,我总是收到一个未定义的错误。返回数据后阿贾克斯是行不通的

,如果我这样做:

function get_list(){ 
     $.post('php/reverse.php', function(data){ 
     alert(data); 
     }); 
    } 

一切完美。但如果我做类似

function get_list(){ 
      $.post('php/reverse.php', function(data){ 
      return data; 
      }); 
     } 

alert(get_list()); 

然后它突然给我一个未定义的错误。有人能告诉我我做错了什么吗?

+0

考虑范围。你告诉你的匿名函数返回数据,但包含这个post调用的函数什么都不返回。 – 2013-04-11 21:14:49

+0

那我该如何解决呢? – kuwame 2013-04-11 21:15:07

+0

考虑到'get_list'函数在匿名回调函数开始执行之前返回。 'get_list'函数返回undefined,因为它在执行过程中从不碰到'return'语句。 'return data'语句位于回调函数内部,不会作为'get_list'函数的一部分执行。回调函数在异步POST请求完成后执行(但调用它的代码不关心它返回的内容)。 – tcovo 2013-04-11 21:21:27

你不能在异步情况下返回这样的数据...

你必须通过它的成功执行了一些回调:

function get_image_list(handler){ 
    $.post('php/reverse.php', function(data){ 
     handler(data); 
    }); 
} 

get_image_list(function(data){alert(data);}); 
+0

太好了!工作非常好! – kuwame 2013-04-11 21:19:08

这是因为asynchronous性质AJAX的。您不能从回调函数返回值,因为在AJAX调用触发回调时,所有其他代码都已执行很长时间。

您的get_image_list实际上并不返回任何内容,因为它不包含return语句。 AJAX调用是异步执行的。对于按预期的方式工作,你的代码片段,那就要看起来像:

function get_image_list(callback) { 
    $.post('php/reverse.php', function(data){ 
     callback(data); 
    }); 
} 

get_image_list(function(data) { alert(data); }); 

这不是理想的,但似乎你不熟悉异步调用呢。请调查回调。 说了这么多,这是你要寻找的代码:

function getList(){ 
    var dataToReturn; 
    $.ajax({ 
     url: "php/reverse.php", 
     async: false 
    }).done(function(data){ 
     dataToReturn = data; 
    }); 
    return dataToReturn; 
} 

alert(getList()); 

通过设置异步为假,你迫使代码要等到数据是随时可以使用。这样你就可以分配给'dataToReturn',并在函数执行结束时返回它。默认情况下,异步是真实的,所以在数据准备好之前执行到达函数的末尾,因此没有什么可以返回的。