我有一个返回数据的函数:
function getData(){
return {result:[{},{},{}...]};
}
此功能完美无缺。现在我想动态生成数据。我使用以下方法生成数据,但是它没有用完:
function getData(){
$.ajax({
//...
async: false,
success: function(data, textStatus, jqXHR){
return {result:[{},{},{}...]};
}
});
}
有些人可以为我提供一些提示或指出我正确的方向吗?谢谢。
答案 0 :(得分:4)
您必须从外部函数返回数据:
function getData () {
var data;
$.ajax({
//...
async: false,
success: function(data, textStatus, jqXHR){
data = {result:[{},{},{}...]};
}
});
return data;
}
但是,您不应该使用同步AJAX请求。这将冻结所有执行,直到请求完成。
相反,返回$.ajax
调用返回的承诺,并在您的调用代码中使用该承诺:
function getData () {
return $.get('/path/to/recourse');
}
getData().then(function (results) {
// use results here...
});
答案 1 :(得分:3)
从不这样做(使用async:false),它将阻止浏览器线程,直到响应来自服务器,这将冻结用户体验,直到响应返回。
您只是从内部函数返回,而不是从getData
function getData(){
var result;
$.ajax({
//...
async: false,
success: function(data, textStatus, jqXHR){
result = {result:[{},{},{}...]};
}
});
return result
}
然后如何正确地执行 ... 在SO本身中有成千上万的线程 ......一个着名的线程是How to return the response from an AJAX call < / p>