如何从jQuery ajax成功函数正确返回数组?

时间:2010-02-03 20:25:13

标签: jquery ajax scope return

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);

它返回'undefined'。 我无法弄清问题在哪里。数组在成功函数内创建,但我无法正确返回。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:16)

在您的代码中,您在进行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);
});

答案 1 :(得分:5)

David的一个非常简单的例子。

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);    
});

答案 2 :(得分:0)

在阵列上使用push。您还想创建一个名为Group的类型,然后在循环中创建一个新组,然后将其推入该数组。