【问题标题】:How to return data from ajax success function?如何从ajax成功函数返回数据?
【发布时间】:2015-06-29 21:46:50
【问题描述】:

在我的前端 JavaScript 应用程序中,我发出一个 ajax 请求以从服务器获取数据。获得数据后,我想将那条信息返回给视图。

var view_data;
$.ajax({
    url:"/getDataFromServer.json",
    //async: false,
    type: "POST",
    dataType: "json",
    success:function(response_data_json) {
        view_data = response_data_json.view_data;
        console.log(view_data); //Shows the correct piece of information
        return view_data; // Does not work. Returns empty data
    }
 });

 // return view_data; --> Keeping the return outside of the ajax call works but then I need to make my ajax call synchronous in order for this return clause to be executed after the ajax call fetches data.

我该怎么做?

【问题讨论】:

  • 您应该将 jquery 标签添加到您的帖子中..
  • 你在分配view_data = response_data_json.view_data;那你为什么不使用view_data你为什么要在成功方法中返回它。
  • 也许这可以帮助你codingbin.com/get-return-data-ajax-call
  • 我通过将数据写入 cookie 然后在另一个函数中使用它来解决这个问题。

标签: javascript jquery ajax


【解决方案1】:

而不是从success 返回data:将data 传递给函数。

var view_data;
$.ajax({
    url:"/getDataFromServer.json",
    //async: false,
    type: "POST",
    dataType: "json",
    success:function(response_data_json) {
        view_data = response_data_json.view_data;
        console.log(view_data); //Shows the correct piece of information
        doWork(view_data); // Pass data to a function
    }
 });

function doWork(data)
{
    //perform work here
}

【讨论】:

  • 但是,如何使用 doWork 函数并将返回数据获取到另一个更改事件中。
【解决方案2】:

ajax 本质上是异步的。该代码不会等待来自您的success 回调的响应,因此除非通过,否则无法在success 之外访问数据。

你需要处理成功里面的数据,尝试调用一个单独的方法/函数:

function handleResponse(data) {
    // do something with data
}

success:function(response_data_json) {
    handleResponse(response_data_json.view_data); 
}

这里是 jquery 的 ajax method 上的文档

您也可以只使用外部成功函数,而不是使用 annon 内联,然后无论如何调用该函数。它仍然会将数据作为参数传递

function handleResponse(data) {
  // do something
}

$.ajax({
    url:"/getDataFromServer.json",
    //async: false,
    type: "GET",
    dataType: "json",
    success:handleResponse
 });

更新:正如 cmets 中所指出的,使用http get 请求而不是post 可能会更好。他们both have advantages 但是get 请求可以被缓存,因此对于检索数据它可能会提高性能。

【讨论】:

  • 我是否错误地假设因为他想从服务器获取数据,所以它应该是 GET 请求,而不是 POST 请求?
  • @PaulFitzgerald 不一定,尽管在这种情况下看起来是这样。如果他正在发布数据并且想要处理来自后端的失败/成功消息,那么发布是有意义的,但在这我认为你是对的,它应该是 get
【解决方案3】:

这是传递婴儿车并获得响应的最佳方式

function get_table_data_helper(table, id){
    return $.ajax({
        url: DOCUMENT_ROOT + '/php/get_table_data.php',
        type: 'post',
        data: {table: table, id: id},
        async: false,
        success:function(add_clint_res){
            (jQuery.parseJSON(add_clint_res));
        }
    });
}
function get_table_data(table, id, column){
    return jQuery.parseJSON(get_table_data_helper(table, id).success(function (data) {  return jQuery.parseJSON(data);  })['responseText'])[column];

}

然后获取您的数据,例如

get_table_data('city_table', '3', 'city_col')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2014-03-27
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多