在ajax调用中设置对象数组

时间:2014-03-04 18:28:57

标签: javascript ajax

我有以下包含以下内容的MediaObject对象:

  • 媒体对象
  • 一个数组
  • 和函数getMedia()

在我的getMedia函数中,我进行了ajax调用,并且在成功时我希望能够  创建一个Media对象并将该对象推送到我的数组中。但是,由于某些原因我无法引用我的数组,我应该如何引用它?

我试过了两个:MediaObject.arrayList.push(mediaItem)和this.arrayList.push(mediaItem); 都没有工作。

    function  MediaObject(){

            function Media(){
              this.id = "";
            }

            this.arrayList = [];

            AmebaObject.prototype.getMedia = function(){
              $.ajax({
                        url: this.rooturl+ this.loginurl,
                        type: 'GET',
                        headers: myheaders,
                        dataType: 'xml',
                        success: function (xml) {    
                             this.xml = xml;
                            $(xml).find("media").each(function(){
                               var mediaItem = new Media();
                               mediaItem.id = $(this).find('id').text();
                               MediaObject.arrayList.push(mediaItem);
                            });

                        },
                        error: function (xhr, textStatus, errorThrown) {
                            console.log("Status code : " + xhr.status);
                            console.log("Error: " + errorThrown);
                        }
                    });
            }

}

错误:未捕获的TypeError:无法调用未定义的方法'push'

2 个答案:

答案 0 :(得分:1)

如果您希望arrayList成为MediaObject函数的一部分,请编写

MediaObject.arrayList = [];

如果要将arrayList作为MediaObject的成员引用,则需要更改在success函数中引用它的方式。

答案 1 :(得分:1)

我可能会弄错,但对我来说,MediaObject是构造函数,而访问MediaObject.arrayList的方式则表示静态属性。这有点令人困惑。

正如user1329482建议的那样,你可以静态地使用arrayList,但是你可能应该在构造函数之外定义它(否则每个新实例都会重置它)。

但是,如果要将其用作实例属性,则使用this是唯一的选择。要在回调范围内使用this,您必须定义一些局部变量(通常为var that = this)并以此方式访问它,或bind()您的回调。

相关问题