设置一个成功的Ajax调用后的变量

设置一个成功的Ajax调用后的变量

问题描述:

在java中,你可以通过声明它的名字来引用一个外部类。设置一个成功的Ajax调用后的变量

class A { 
    void A() { 

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

现在我正在尝试在JavaScript中做类似的事情。贝娄我有构造函数,可以调用ajax。如果成功,则此ajax调用将设置get方法和AssetManager的资产。

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]; 
      } 
     } 
    }); 
} 
+0

你为什么要在类定义中放入ajax调用? – gurvinder372

+0

'AssetManager.this'?它没有突出显示任何控制台? – Rayon

+0

@ gurvinder372因此它可以在物件初始化时运行 – Thatsuperfly

你必须创建变量并将其指向这个之前执行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]; 
     } 
    } 
}); 

Assumming你的Ajax调用是假设lazyly初始化的其他属性您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]; 
      } 
     } 
    }); 
}