成功调用ajax后设置变量

时间:2016-03-04 06:04:57

标签: javascript jquery ajax

在java中,您可以通过声明其名称后跟此引用外部类。

class A {
    void A() {

    }
    class B {
        void B() {
            A.this.A();
        }
    }
}

现在我试图在javascript中做类似的事情。 Bellow我有一个构建一个ajax调用的构造函数。如果成功设置get方法和AssetManager的资产,则调用此ajax。

function AssetManager(path) {

    this.assets = {};

    this.get = function(tag,name) {
        return 0;
    };

    $.ajax({
        url: path,
        dataType: 'json',
        success: function(o) {
            if (o.sprite) {
                var keys = Object.keys(o.sprite);
                for (var i = 0; i < keys.length; i++) {
                    var obj1 = keys[i];
                    AssetManager.this.assets.sprite[obj1] = new Image();
                    AssetManager.this.assets.sprite[obj1].src = o.sprite[obj1];
                }
            }
            AssetManager.this.get = function (tag, name) {
                return assets[tag][name];
            }
        }
    });
}

2 个答案:

答案 0 :(得分:0)

您必须在执行ajax之前创建变量并将其指向此并在成功处理程序中访问它:

function AssetManager(path) {
  // ......
  // Set this object to me variable
  var me = this;

  $.ajax({
    url: path,
    dataType: 'json',
    success: function(o) {
        if (o.sprite) {
            var keys = Object.keys(o.sprite);
            for (var i = 0; i < keys.length; i++) {
                var obj1 = keys[i];
                me.assets.sprite[obj1] = new Image();
                me.assets.sprite[obj1].src = o.sprite[obj1];
            }
        }
        me.get = function (tag, name) {
            return assets[tag][name];
        }
    }
});

答案 1 :(得分:0)

假设你的ajax调用假设是懒惰地初始化你的AssetManager的其他属性,你需要保存this的引用,以便它可以在ajax方法中使用(其中this的含义会改变)

function AssetManager(path) {

    this.assets = {};

    this.get = function(tag,name) {
        return 0;
    };

    var self = this;

    $.ajax({
        url: path,
        dataType: 'json',
        success: function(o) {
            if (o.sprite) {
                var keys = Object.keys(o.sprite);
                for (var i = 0; i < keys.length; i++) {
                    var obj1 = keys[i];
                    self.assets.sprite[obj1] = new Image();
                    self.assets.sprite[obj1].src = o.sprite[obj1];
                }
            }
            self.get = function (tag, name) {
                return assets[tag][name];
            }
        }
    });
}