2012-07-10 27 views
0

我們在我們的應用程序中使用jQuery來進行AJAX調用。如何使用jQuery在特定上下文中使用方法?在dojo我們用過dojo.hitch()。 jQuery中有類似的東西嗎?以下是我們正在使用的示例代碼。我需要在SampleMethod的上下文中執行success處理程序。下面的代碼應該 給我例外,因爲resultSetHandler在窗口上下文中不可用。你能不能讓我知道。jquery在上下文中調用JS方法

我們使用jQuery版本1.3.2

function SampleMethod(){ 
    this.invokeProcedure=function(procedurePath){ 
     $.ajax({ 
       type: "GET", 
       url: procedurePath, 
       dataType: "json", 
       success: resultSetHandler, 
       error: errorHandler 
      }); 
    } 

    this.resultSetHandler=function(args){ 
     //Handle the result 
    } 

    this.errorHandler=function(args){ 
     //Handle the result 
    } 

} 

var sampleObj=new SampleMethod(); 
sampleObj.invokeProcedure('url'); 
+1

jQuery 1.3.2於2009-02-19發佈 - 這使它3.5歲,這是jQuery發佈週期中的一個永恆。我絕對建議更新至LEAST 1.5以獲得新的ajax重寫代碼,但您不妨跳到最新的版本(1.7),甚至試用1.8版本,因爲它很快會被髮布。 – gnarf 2012-07-10 18:31:38

+1

特別值得注意的是,1.3.2早於IE9的發佈。 – Pointy 2012-07-10 18:38:31

+0

也是自1.3.2以來的1059個固定的錯誤:http://bit.ly/MfB9hv – gnarf 2012-07-10 18:46:00

回答

2

只是保留this和功能將它們包裝:

this.invokeProcedure=function(procedurePath){ 
     var savedThis = this; 
     $.ajax({ 
       type: "GET", 
       url: procedurePath, 
       dataType: "json", 
       success: function() { savedThis.resultSetHandler(); }, 
       error: function() { savedThis.errorHandler(); } 
      }); 
    } 

(也許應該直傳 「成功」 函數參數 「resultSetHandler」 了。)


編輯 —的上面將在一般情況下處理這類問題,但@Blaster在評論中正確指出jQuery $.ajax機制提供了一個更簡單的解決方案。可以在傳入的參數對象中設置context屬性,並將該值用作回調的上下文。也就是說,補充說:

context: this, 

$.ajax參數對象會使事情作爲工作最初寫的。

+0

+1我喜歡稱它爲'var that | self = this;':) :) – Blaster 2012-07-10 18:24:11

+0

@Blaster以及它的品味問題:-)有時候喚起物體本質的名字很好,但在這種情況下,我不能沒有想到任何聰明的事情。 – Pointy 2012-07-10 18:25:25

+0

@Pointry:我懷疑'上下文:這個'也應該做那裏的伎倆而不是那個。 – Blaster 2012-07-10 18:26:49

2

這jQuery的版本是在這一點絕望的時候,你應該升級。您正在尋找的功能是jQuery.proxy,只有1.4+可用

如果你正在升級,但你應該考慮升級到最新版本,你現在只有4個主要版本。

如果您在一個不允許升級3.5年舊圖書館的環境中工作,請考慮複製source of jQuery.proxy以使其工作。

+0

是非常好的一點。 – Pointy 2012-07-10 18:31:30

+0

我曾見過這個。但不幸的是,自從我們的版本是1.3.2以來,我們無法使用它。 – Apps 2012-07-10 18:54:21

+0

@Apps - 2012年沒有好的藉口不能升級到1.3.2以上。 – gnarf 2012-07-10 18:57:36