如何正确地从jQuery AJAX success函数返回数组?[duplicate]

7jmck4yq  于 2022-11-29  发布在  jQuery
关注(0)|答案(3)|浏览(414)

此问题在此处已有答案

How do I return the response from an asynchronous call?(44个答案)
9年前关闭。

TheObject = {    
    getArray: function(){
        var groups = new Array;
        $.ajax({
              type: "POST",
              url: "link.php",
              success: function (data){
                  var counter = 0;
                  $('g',data).each(function(){    
                      var group_name = $(this).find("name").text();
                      var group_id = $(this).find("id").text();
                      var group = {
                         id: group_id,
                         name: group_name
                      }
                      groups[counter] = group;
                      counter++;
                  });
                  return groups;
              }
         });
     }

}

当我尝试调用这个方法时:

var a = TheObject.getArray();
alert(a);

它返回“未定义”。我不知道问题出在哪里。数组在成功函数中创建,但我无法正确返回它。谢谢你的帮助!

5f0d552i

5f0d552i1#

在您的代码中,您在 AJAX 调用完成之后使用过程编码查找groups,主要问题是您在ajax调用完成之前查找groups
另一个问题是,您将组返回给success()函数,但TheObject.getArray()函数什么也不返回。
所以你需要把回调函数引入 AJAX 函数,如下所示:

TheObject = {
    getArray: function(callback) {
        var groups = new Array;
        $.ajax({
              type: "POST",
              url: "link.php",
              success: function (data){
                  var counter = 0;
                  $('g',data).each(function(){    
                      var group_name = $(this).find("name").text();
                      var group_id = $(this).find("id").text();
                      var group = {
                         id: group_id,
                         name: group_name
                      }
                      groups[counter] = group;
                      counter++;
                  });
                  callback.call(this,groups);
              }
         });
     }
}

TheObject.getArray(function(a) {
    // this code runs when the ajax call is complete
    alert(a);
});
7xllpg7q

7xllpg7q2#

大卫例子的一个非常简单的版本。

TheObject = {
    getArray: function(callback) { 
        $.ajax({
              cache: true,
              type: "GET",
              url: "http://www.domain.com/core/domains.php",
              success: function (data){ 
                  callback.call(this,data);
              }
         });
     }
}

TheObject.getArray(function(data) {
    javascript: console.log(data);    
});
5lhxktic

5lhxktic3#

在数组上使用push。另外,您希望创建一个名为Group的类型,然后在循环中创建一个新组,然后将其推入数组。

相关问题