2010-11-15 90 views
0

我試圖通過有一個可重複使用的方法來進行異步ajax調用來減少代碼和簡化某些事情。我實際上是從jQuery切換到YUI 3並清理過程中的東西。這可能對於你們的JavaScript人來說是非常容易的,但我一直在試圖弄清楚如何在不泄漏內存的情況下調用我的回調函數。如果我在任務管理器中觀看IE,內存上升非常快(每1.5秒調用一次該功能)。Javascript回調異步Ajax YUI 3

基本上,我有我的普通網頁,具有我想在ajax完成後調用的函數。我從那裏更新用戶界面,並設置其他只是頁面一部分的變量。我有一個JavaScript文件,我在那裏實際上使ajax調用的方法。當我使用該方法傳遞的回調時,它正在泄漏。

JavaScript文件:

function doAjaxRequest(url, callback) { 
    YUI().use('io', 
     function (Y) { 
      var cb = 
      { 
       timeout: 5000, 
       on: { 
        success: function (x, o) { 
         callback(o.responseText); 
        }, 
        failure: function (x, o) { 
         callback(""); 
        } 
       } 
      } 

      Y.io(url, cb); 
     }); 
} 

網頁:

doAjaxRequest(myUrl, showContent); // Called every couple seconds 

     function showContent(o) { 
      document.getElementById('ajaxcontent').innerHTML = o; 
      // Other Stuff Removed  
     } 

如果我註釋掉回調線,但不得泄漏。我必須以另一種方式進行回調,我只是不知道那是什麼。

+0

哪個版本的IE?這是否發生在Firefox/Chrome/Safari/Opera(閱讀:真實的瀏覽器)? – 2010-11-15 01:40:03

+0

這是IE 8.我沒有嘗試過其他瀏覽器,但只是測試Chrome,它有相同的問題。 – GregInWI2 2010-11-15 02:41:49

回答

1

問題是,您正在創建一個新的YUI實例,每次調用doAjaxRequest。而不是像這樣構建您的代碼:

YUI().use('io', function (Y) { 
function doAjaxRequest(url, callback) { 
    // ... 
} 

window.doAjaxRequest = doAjaxRequest; 
}); 

這將只創建一個YUI實例。

+0

仍然是同樣的問題。就像我說的那樣,如果我註釋掉回調(o.responseText),它不會泄漏; – GregInWI2 2010-11-15 13:49:15

+0

這很奇怪。你可以發佈你的實際代碼到JSBin嗎? – lawnsea 2010-11-15 14:07:53