2010-02-13 64 views
2

我以前使用過原型,現在我正在嘗試學習jquery。 問題:我有一個使ajax調用的對象,並且我希望成功回調在我的對象中調用一個函數。問題是在回調函數中,「this」不指向我原來的類。jQuery ajax和JavaScript對象

例子:

function C(){ 
    this.loadData(); 
} 
C.prototype.loadData = function(){ 
    $.ajax({ 
     url:"URL/", 
     dataType:'json', 
     success:this.dataRetreived 
    }); 
} 
C.prototype.dataRetreived = function(JSON){ 
    console.info(this); 
    console.info(JSON); 
} 

使用Prototype我可以簡單地使用.bind(this),但jQuery有一個做事的不同方式..

+0

順便說一句'function.bind'與試製是ECMAScript的第五版標準的一部分,所以你就可以在FUT反正用它而不必破解函數原型。 – bobince 2010-02-13 13:33:07

+0

@bobince:這將是一個很好的補充,尤其是因爲我傾向於使用.bind很多... – Quamis 2010-02-13 13:40:13

+0

是的,我也是(儘管通過自己修補'Function.prototype',因爲我沒有使用Prototype)。在這之間,嚴格模式修復以及在語言中添加長期標準的Mozilla功能,JavaScript終於變得不那麼可怕了。 – bobince 2010-02-13 13:56:28

回答

3

有jQuery的1.4 「代理」 的方法那是kind-像在原型「綁定」或功能:

success: $.proxy(instanceOfC, C.prototype.dataRetrieved) 
+0

我現在正在測試這個變體,看起來.proxy做的伎倆......但似乎我從服務器返回的json字符串是無效的... ...#:window.JSON.parse('{ret:「 d「}')'在firefox中似乎被認爲是無效的(在firebug控制檯中嘗試了thia,並且它引發了'SyntaxError:JSON.parse {message =」JSON.parse「,更多...}任何ideeas爲什麼說那個? – Quamis 2010-02-13 13:39:06

+0

我已經想通了......看起來像json的有效語法是''{「ret」:「d」}''... – Quamis 2010-02-13 13:50:36

+1

也有,似乎ba的'上下文'attribtue AJAX請求,這是相同的伎倆:) – Quamis 2010-02-13 13:52:20