7

我有一个名为 Spotlight 的“类”/函数。我正在尝试通过 ajax 检索一些信息并将其分配给 Spotlight 的属性。这是我的 Spotlight 课程:

function Spotlight (mId,mName) {
    this.area = new Array();

    /**
     * Get all area information
     */
    this.getArea = function () {

        $.ajax({
            url: base_url +'spotlight/aGetArea',
            type: 'POST',
            success: function (data) {
                this.area = data;
            }
        });
    }
}

我已将该对象分配给一个数组,并且很难从 Spotlight 中访问它,因此我希望使用“this”访问所有内容。虽然成功功能似乎在课堂之外,但我不知道如何在课堂内制作它。

有没有办法使用 this.area 而不是 Spotlight.area 将数据放入类属性中?

4

3 回答 3

13

this 的值取决于每个函数的调用方式。我看到解决此问题的 3 种方法:

1.为此创建别名

var that = this;
this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        success: function (data) {
            that.area = data;
        }
    });
};

2.使用jQuery.ajax context选项

this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        context : this,
        success: function (data) {
            this.area = data;
        }
    });
};

3. 使用绑定函数作为回调

this.getAreaSuccess = function (data) {
    this.area = data;
};
this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        success: this.getAreaSuccess.bind(this)
    });
};
于 2013-01-14T18:54:46.750 回答
4

反正Spotlight.area也行不通。您只需要保留外部this

this.area = [];
var theSpotlight = this;

然后在回调中:

  theSpotlight.area = data;
于 2013-01-14T18:51:46.970 回答
1

在success函数内部时,this对应success函数的作用域。

function Spotlight (mId,mName) {
    this.area = [];
    var scope = this;

    /**
     * Get all area information
     */
    this.getArea = function () {

        $.ajax({
            url: base_url +'spotlight/aGetArea',
            type: 'POST',
            success: function (data) {
                scope.area = data;
            }
        });
    }
}
于 2013-01-14T18:55:43.557 回答