1

我有一个返回数据的函数:

function getData(){
   return {result:[{},{},{}...]};
}

此功能完美运行。现在我想动态生成数据。我使用以下方法生成数据,但是它不起作用:

function getData(){
   $.ajax({
      //...
      async: false,
      success: function(data, textStatus, jqXHR){
         return {result:[{},{},{}...]}; 
      }
   });
}

有人可以为此提供一些提示或指出正确的方向吗?谢谢你。

4

2 回答 2

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...
});
于 2013-09-16T03:24:45.847 回答
3

永远不要这样做(使用 async : false),它将阻塞浏览器线程,直到响应来自服务器,这将冻结用户体验,直到响应返回。

你只是从内部函数返回,而不是从getData

function getData(){
   var result;
   $.ajax({
      //...
      async: false,
      success: function(data, textStatus, jqXHR){
         result = {result:[{},{},{}...]}; 
      }
   });
   return result
}

那么如何正确地做到这一点......在SO本身中有成千上万的线程......一个着名的是如何从AJAX调用返回响应

于 2013-09-16T03:25:08.507 回答