[英]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.