Javascript:从ajax成功设置类属性

Javascript: Setting class property from ajax success

本文关键字:设置 属性 成功 ajax Javascript      更新时间:2023-09-26

我有一个名为Spotlight的"类"/函数。我试图通过ajax检索一些信息,并将其分配给聚光灯的属性。这是我的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 '访问所有内容。虽然成功函数似乎在类的外部,但我不知道如何使它在类的内部。

是否有一种方法来获取数据到类属性使用这个。区域而不是重点报道,区域?

这个值取决于每个函数的调用方式。我认为有三种方法可以解决这个问题:

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

Spotlight.area无论如何都不起作用。您只需要保留外部的this:

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

,然后在回调中:

  theSpotlight.area = data;

在success函数内部时,这个对应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;
            }
        });
    }
}