Php post ajax中的返回数据无效

Php post ajax中的返回数据无效,php,jquery,ajax,post,Php,Jquery,Ajax,Post,我正在尝试使用$.post检索数据并将其存储为返回类型。然而,我总是得到一个未定义的错误 如果我这样做: function get_list(){ $.post('php/reverse.php', function(data){ alert(data); }); } function get_image_list(callback) { $.post('php/reverse.php', function(data){ ca

我正在尝试使用$.post检索数据并将其存储为返回类型。然而,我总是得到一个未定义的错误

如果我这样做:

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

get_image_list(function(data) { alert(data); }); 
一切都很完美。但如果我做了类似的事情

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

alert(get_list()); 

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

您不能在异步上下文中返回此类数据

您必须传递一些在成功时执行的回调:

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

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

这是因为AJAX的异步特性。您无法从回调函数返回值,因为在AJAX调用触发回调时,所有其他代码早已执行。

您的get\u image\u列表实际上没有返回任何内容,因为它不包含return语句。AJAX调用是异步执行的。要使代码段按预期工作,它必须如下所示:

function get_list(){
      $.post('php/reverse.php', function(data){
        alert(data);
      });
  }
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());

通过将async设置为false,可以强制代码等待数据准备好使用。这样,您就可以分配给“dataToReturn”,并在函数执行结束时返回它。默认情况下,async为true,因此执行在数据准备就绪之前到达函数的末尾,因此没有返回任何内容。

考虑范围。您告诉匿名函数返回数据,但包含此post调用的函数什么也不返回。那么我如何修复它?请考虑get_list函数在匿名回调函数开始执行之前返回。get_list函数返回undefined,因为它在执行过程中从不命中return语句。returndata语句位于回调函数内部,不作为get_list函数的一部分执行。回调函数是在异步POST请求完成后执行的,但是调用它的代码并不关心它返回什么。太棒了!很好用!