-1

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

4 回答 4

4

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

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

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

get_image_list(function(data){alert(data);}); 
于 2013-04-11T21:15:07.187 回答
1

您的 get_image_list 实际上不返回任何内容,因为它不包含返回语句。AJAX 调用是异步执行的。为了使您的代码段按预期工作,它必须看起来像:

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

get_image_list(function(data) { alert(data); }); 
于 2013-04-11T21:18:54.717 回答
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,因此在数据准备好之前执行到函数的末尾,因此没有什么可以返回。

于 2013-04-11T21:26:57.030 回答
0

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

于 2013-04-11T21:15:45.770 回答