简体   繁体   English

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

[英]How to return data from ajax success function?

In my front end JavaScript application, I make an ajax request to fetch data from the server.在我的前端 JavaScript 应用程序中,我发出一个 ajax 请求以从服务器获取数据。 As soon as I get the data, I want to return that piece of information to the view.我一拿到数据,就想把那条信息返回给视图。

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.

How would I do this?我该怎么做?

Instead of returning data from success : pass data to a function.而不是从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
}

ajax is by nature asyc. ajax 本质上是 asyc。 The code doesn't wait for the response from your success callback, so the data isn't accessible outside of success unless passed.代码不会等待success回调的响应,因此除非通过,否则无法在success之外访问数据。

You'd need to handle the data inside the success, try calling a separate method/function:您需要处理成功中的数据,请尝试调用单独的方法/函数:

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

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

here are the docs on jquery's ajax method这是关于 jquery 的ajax 方法的文档

You could also just use an external success function rather then an annon inline that then calls the function anyway.您也可以只使用外部成功函数而不是 annon 内联函数,然后无论如何调用该函数。 it will still pass the data as a param它仍然会将数据作为参数传递

function handleResponse(data) {
  // do something
}

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

UPDATE: as pointed out in the comments, you might be better using a http get request rather then a post .更新:正如评论中所指出的,您最好使用http get请求而不是post they both have advantages however get requests can be cached, so for retrieving data it might give a perf boost.它们都有优点,但是可以缓存get请求,因此对于检索数据,它可能会提高性能。

that's the best way to pass prams and get response这是传递婴儿车并获得回应的最佳方式

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];

}

then do get your data like然后确实让你的数据像

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM