如何从ajax成功函数返回数据?

Posted

技术标签:

【中文标题】如何从ajax成功函数返回数据?【英文标题】:How to return data from ajax success function? 【发布时间】: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 然后在另一个函数中使用它来解决这个问题。 【参考方案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')

【讨论】:

以上是关于如何从ajax成功函数返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

从arraylist返回值到ajax成功函数

怎么获取AJAX前台返回JSON 数据

如何从ajaxcall返回的json对象中提取值

将ajax数据发布到PHP并返回数据

Ajax - 如何在成功函数中使用返回的数组

AJAX获取数据成功后的返回数据如何声明成全局变量