2010-11-15 107 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