2010-11-15 15 views
0

J'essaie de réduire le code et de simplifier quelque chose en ayant une méthode réutilisable pour faire des appels ajax asynchrones. Je suis en train de passer à YUI 3 de jQuery et de nettoyer les choses dans le processus. C'est probablement super facile pour vous les gars de javascript à repérer, mais j'ai essayé de comprendre comment je peux appeler mon rappel sans fuites de mémoire. Si je regarde IE dans la mémoire Task Manager monte très vite (la fonction est appelée toutes les 1,5 secondes).Javascript Callback Async Ajax YUI 3

Fondamentalement, j'ai ma page web normale qui a la fonction que je veux appelé après que l'ajax se termine. Je suis en train de mettre à jour l'interface utilisateur à partir de là et de définir d'autres variables qui ne sont qu'une partie de la page. J'ai un fichier javascript où je mets la méthode qui fait l'appel ajax. Lorsque j'utilise le rappel que je passe dans cette méthode, il fuit.

fichier 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); 
     }); 
} 

page web:

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

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

Si je commente la ligne de rappel, il ne fuit pas. Je dois faire le rappel d'une autre façon, je ne sais pas ce que c'est.

+0

Quelle version d'IE? Cela arrive-t-il dans Firefox/Chrome/Safari/Opera (lire: les vrais navigateurs)? –

+0

C'est IE 8. Je n'avais pas essayé un autre navigateur mais juste testé Chrome et il a le même problème. – GregInWI2

Répondre

1

Le problème est que vous créez une nouvelle instance YUI avec chaque appel à doAjaxRequest. Structurez votre code comme ceci à la place:

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

window.doAjaxRequest = doAjaxRequest; 
}); 

Cela créera une seule instance YUI.

+0

Toujours le même problème. Comme je l'ai dit cependant, il ne fuit pas si je commente callback (o.responseText); – GregInWI2

+0

C'est étrange. Pouvez-vous envoyer votre code actuel à JSBin? – lawnsea