2012-09-14 170 views
0

我被分配一個任務將jQuery 1.3.2升級到最新版本(目前1.8.1)一切似乎做工精細的從$就功能除了升級後,下面的代碼調用服務器,然後執行回調函數doFurtherStuff執行額外的工作:升級的JQuery 1.3.2至1.8.1

function ChangeContent(url, somepageobject) { 
    var xhrobj = $.ajax({ 
     url: url, 
     context: somepageobject, 
     callback: doFurtherStuff, 
     success: function(data) { 
       somepageobject.html($(data)); 
       this.callback.call(this.context[0], data); // >> Code breaks here 
      } 
    }); 
    return xhrobj; 
} 

當運行的代碼塊,服務器數據回來好,但後來我得到以下錯誤:

IE10和IE9:

JavaScript runtime error: Unable to get property 'call' of undefined or null reference

谷歌瀏覽器:

Uncaught TypeError: Cannot call method 'call' of undefined

對象「回調」 1.8.1未定義,但一切都很好在1.3.2,我很高興,如果需要更改代碼,我只是想不通一種方式。 ()

+0

了很多,因爲在1.3.2版本中改變jQuery,ajax方法現在可以與Deferred一起使用,你應該使用它。 – Asciiom

回答

2

我來回答我的問題,因爲所有其他解決方案(而正確的)不不改變方式的客戶端(被調用者)進行通信,併發送參數的方法,我不能這樣做解決我的問題,因爲我無法控制他們(外部客戶)。

所有我需要的是不斷變化的「上下文」在上面的例子中「thecontext」到jQuery的1.8.1工作,這裏是工作代碼:

function ChangeContent(url, somepageobject) { 
    var xhrobj = $.ajax({ 
     url: url, 
     thecontext: somepageobject, 
     callback: doFurtherStuff, 
     success: function(data) { 
       somepageobject.html($(data)); 
       this.callback.call(this.thecontext[0], data); // >> Code breaks here 
      } 
    }); 
    return xhrobj; 
0

嘗試使用jQuery則:http://api.jquery.com/deferred.then/

阿賈克斯()返回一個Deferred對象,這樣你可以把它執行操作一旦完成。

+0

博覽會喊,但我在一個位置只更新此功能的內容,也有對ChangeContent功能上面,我沒有獲得了很多電話。 – Maya