2012-12-05 57 views
1

我有一个问题,使用类与setter使用ajax。这是条件。使用ajax设置原型属性jquery

var MyClass = Class.create(); 
MyClass.prototype = { 
    myAttr:0, 
    setMyAttr: function(){ 
     jQuery.ajax({ 
      url:'data.php', 
      success:function(data) { 
       //set myAttr here 
      } 
     }); 
    } 
} 

我想设置myAttr里面的成功函数,怎么做到这一点?谢谢。 :D

+0

'MyClass.prototype.myAttr = ...',也许? –

+0

请注意,您将遇到计时问题。在ajax完成之前,'myAttr'将为0. –

+0

是的,我正在寻找'MyClass.prototype.myAttr = ...'。 Thx为您提供帮助。 :D –

回答

2

你还没有说什么Class.create是(JavaScript本身没有),但我认为这不是问题的重要。

我假设你想在实例上设置myAttr,而不是原型(但如果我错了,请参阅下面的内容)。最简单的方法是利用这样一个事实,即您的success回调已经在调用setMyAttr的上下文中关闭,因此您将变量设置为this(因为thissuccess回调中会有所不同),并使用以下代码:

var MyClass = Class.create(); 
MyClass.prototype = { 
    myAttr:0, 
    setMyAttr: function(){ 
     var self = this;   // <== Set the variable 
     jQuery.ajax({ 
      url:'data.php', 
      success:function(data) { 
       self.myAttr = data; // <== Use it 
      } 
     }); 
    } 
}; 

更多关于关闭:Closures are not complicated

但是,如果我错了,你就真的想更新,而不是原型:

var MyClass = Class.create(); 
MyClass.prototype = { 
    myAttr:0, 
    setMyAttr: function(){ 
     jQuery.ajax({ 
      url:'data.php', 
      success:function(data) { 
       MyClass.prototype.myAttr = data; 
      } 
     }); 
    } 
}; 

(注意;在分配到原型的末尾。我极力主张不依赖是自动插入分号恐怖)

+0

是的,我使用原型,它的工作原理!感谢您的帮助:D –

+0

大声笑,thx为您的建议。下次我会一直放下';'。哈哈哈。 –

+0

@DarwinGautalius:很高兴帮助! FWIW,如果您使用Prototype 1.6或更高版本(如果不是,为什么不呢?),您不应该替换'Class.create'返回的函数的'prototype'属性。您应该将一个对象传递给['Class.create'](http://api.prototypejs.org/language/Class/create/)。 (不改变答案,但只是FWIW ...) –

0

你可以做如下:

 success:function(data) { 
      //set myAttr here 
      MyClass.prototype.myAttr = data; 
     }