在ajax后面返回数据不起作用

时间:2013-04-11 21:11:56

标签: php jquery ajax post

我正在尝试使用$ .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()); 

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

4 个答案:

答案 0 :(得分:4)

您无法在异步上下文中返回此类数据...

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

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

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

答案 1 :(得分:1)

你的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); }); 

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这不太理想,但似乎你还不熟悉异步调用。请调查回调。 话虽如此,这是您正在寻找的代码:

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,因此在数据准备好之前执行到达函数的末尾,因此没有任何内容可以返回。