如何从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成功函数返回数据?的主要内容,如果未能解决你的问题,请参考以下文章