【问题标题】:How to return an array from jQuery ajax success function properly? [duplicate]如何正确地从 jQuery ajax 成功函数返回一个数组? [复制]
【发布时间】:2011-01-12 19:15:29
【问题描述】:

对象 = {

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

它返回“未定义”。 我无法弄清楚问题出在哪里。该数组是在成功函数中创建的,但我无法正确返回它。 感谢您的帮助!

【问题讨论】:

    标签: jquery ajax scope return


    【解决方案1】:

    在您的代码中,您正在寻找 groups 在进行 ajax 调用后使用过程编码。主要问题是您在 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);
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 请阅读问题。我在创建数组时没有问题。问题是我不知道如何在成功函数之外获得它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 2011-11-18
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        相关资源
        最近更新 更多