2012-12-05 75 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; 
     }